Skip to content

Instantly share code, notes, and snippets.

@nattybear
Last active November 17, 2020 02:05
Show Gist options
  • Save nattybear/a520c7364b380890e1c4ba49ce7e7c44 to your computer and use it in GitHub Desktop.
Save nattybear/a520c7364b380890e1c4ba49ce7e7c44 to your computer and use it in GitHub Desktop.
하스켈 함수 join

이 글은 책 Learn You a Haskell for Great Good 14장에 나오는 함수 join에 대한 내용을 읽고 정리한 것입니다.

아래와 같이 어떤 모나드 값이 모나드 안에 있다면 어떻게 꺼낼 수 있을까?

Just (Just 9)

join이라는 함수를 이용하면 가능하다.

join :: (Monad m) => m (m a) -> m a

함수 join을 이용하면 아래와 같이 Maybe 안에 있는 Maybe를 꺼낼 수 있다.

GHCi> join (Just (Just 9))
Just 9

그런데 아래와 같이 중간에 한번이라도 Nothing이 포함되어 있으면 꺼낸 값도 Nothing이 된다.

GHCi> join (Just Nothing)
Nothing
GHCi> join Nothing
Nothing

join을 구현해보면 아래와 같다.

join :: (Monad m) => m (m a) -> m a
join mm = do
  m <- mm
  m

재밌는 점은 아래와 같은 식이 항상 성립한다는 것이다.

m >>= f = join (fmap f m)

그래서 직접 어떤 타입의 모나드 인스턴스를 구현할 때는 >>=를 직접 생각해내기 보다는 그냥 join을 이용하는 게 훨씬 편리하다.

대문 링크

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