Skip to content

Instantly share code, notes, and snippets.

@nattybear
Last active December 14, 2020 13:23
Show Gist options
  • Save nattybear/57ba14d0ebaf57f8836cea0e2aa6773e to your computer and use it in GitHub Desktop.
Save nattybear/57ba14d0ebaf57f8836cea0e2aa6773e to your computer and use it in GitHub Desktop.
하스켈 세미그룹 모노이드 제약

책과 다른 결과

프로그래밍 언어는 계속 변한다. 새로운 것이 추가되기도 하고 없던 것이 생기기도 한다. 그래서 책을 읽다보면 실습 결과가 책과 달라서 어떻게 해야할지 모를 때가 있다. 이럴 때는 인터넷 검색을 하거나 잘 아는 사람에게 물어보면 된다. 유명한 언어는 커뮤니티가 활발해서 다양한 질문과 답변이 오고 간다. 반면에 비주류 언어는 관련 정보를 얻기가 힘들다.

국내 하스켈 커뮤니티

내가 알고 있는 한글로 대화를 할 수 있는 하스켈 커뮤니티는 아래 두개 뿐이다.

이외에도 인터넷에서 키워드 하스켈로 검색을 하면 몇몇 고수분들의 가뭄의 단비 같은 하스켈 포스팅을 찾을 수 있기는 하다.

세미그룹과 모노이드

타입 클래스 Semigroupbase-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-dependsQuickCheck 같은 건 적고 Data.Monoid 같은 건 적지 않는데 차이가 뭔가요?
A. build-depends에 적는 것은 패키지 이름입니다. Data.Monoid는 패키지가 아니라 모듈입니다.

감사

바보 같은 질문에 엄청난 답변을 해주시는 디스코드 서버 하스켈 학교의 모든 분들께 항상 감사를 드립니다.

대문 링크

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment