viewimage.php?id=3dafdf21f7d335ab67b1d1&no=29bcc427b28b77a16fb3dab004c86b6fdc843afe757eec57be7102ec3efadaa971b24ed52a1d8817da83c196e21d6065e23121bc69a945abfa4d7b96ac


하스켈 모나드 공부중인데..

모나드는 생각보다 하스켈 전반에 깊이 박혀있는 개념이었음. 거의 하스켈의 뼈대, 근간이라는 생각이 들 정도.

극초반에 배우게 되는 list comprehension도 모나드 구문에 대한 설탕이었고, 거진 왠만한 것들은 다 사실은 펑/어펑/모나드였다 라는 결론이 나오더라. 소오름..


예제중에 이런 게 나오는데:


f x = let

    a = (*2) x

    b = (+10) x

    in a + b


do 블록은 이 구조를 거의 그대로 쓸 수 있음:


f = do

    a <- (*2)

    b <- (+10)

    return $ a + b


이건 설탕이라 원래 모나드 바인딩 정의대로 쓰면 이럼:


f = (*2) >>= (λa -> (+10) >>= (λb -> return $ a + b))


하지만 어펑 스타일로 쓰면 좀더 간결하게 쓸 수 있다:


f = (+) <$> (*2) <*> (+10)


그리고 이렇게도 쓸 수는 있음:


f = (*2) >>= (`fmap` (+10)) . (+)

f = (`fmap` (+10)) . (+) =<< (*2)


ㅎㅎ 마지막 것은 정말 이해하기 힘들다.

모두들 신박한 하스켈 배워서 수학의 기쁨을 느껴보자.

람다 후 아크바르!