프로그래밍 언어는 계속 변한다. 새로운 것이 추가되기도 하고 없던 것이 생기기도 한다. 그래서 책을 읽다보면 실습 결과가 책과 달라서 어떻게 해야할지 모를 때가 있다. 이럴 때는 인터넷 검색을 하거나 잘 아는 사람에게 물어보면 된다. 유명한 언어는 커뮤니티가 활발해서 다양한 질문과 답변이 오고 간다. 반면에 비주류 언어는 관련 정보를 얻기가 힘들다.
내가 알고 있는 한글로 대화를 할 수 있는 하스켈 커뮤니티는 아래 두개 뿐이다.
- 페이스북 그룹 하스켈 학교
- 디스코드 서버 하스켈 학교
이외에도 인터넷에서 키워드 하스켈로 검색을 하면 몇몇 고수분들의 가뭄의 단비 같은 하스켈 포스팅을 찾을 수 있기는 하다.
타입 클래스 Semigroup
은 base-4.11.1.0
부터 Monoid
의 제약이 되었다.
class Semigroup m => Monoid m where
그래서 지금은 mappend
를 따로 구현하지 않아도 <>
를 그냥 쓰면 된다!
mappend = (<>)
그런데 예전에는 세미그룹이 모노이드의 제약이 아니었기 때문에 코드 동작의 결과가 예상과 다를 수 있다. 책에서 소개하는 예제를 따라할 때 자신의 base
패키지 버전을 잘 확인하지 않으면 당황할 수 있다. 그럴 때는 아래와 같이 입력해서 자신의 패키지 버전을 확인해보자.
$ ghc-pkg list | grep base
base
버전을 변경하려면 .cabal
파일의 build-depends
부분을 원하는 버전으로 바꾸면 된다.
build-depends: base >= 4.11
바보 같은 질문은 없다는 원래 Head First 시리즈의 코너 이름인데 한번 따라해봤다 ㅎ
Q. build-depends
에 QuickCheck
같은 건 적고 Data.Monoid
같은 건 적지 않는데 차이가 뭔가요?
A. build-depends
에 적는 것은 패키지 이름입니다. Data.Monoid
는 패키지가 아니라 모듈입니다.
바보 같은 질문에 엄청난 답변을 해주시는 디스코드 서버 하스켈 학교의 모든 분들께 항상 감사를 드립니다.