업자를 위한 아주 인포멀한 모나드 설명
함수를 값에 적용하는 작업을 함수, 값으로만 나누는 게 아니라, 적용도 따로 분리한다.함수, 값, "적용"주인공 같은 함수, 값에 가려 조연 같던 "적용"을 주연으로 끌어 올려 다양한 구현과 일반화를 시도하다 보면 Applicatives, 모나드, Arrow 다 튀어 나온다.
1 + 2 = 4
위 식이 성립하게 바꾸는 방법은?
왼쪽에 1을 더하거나, 오른쪽에 1을 빼거나.한가지 방법이 더 있다.
=을 항상 왼쪽에 +1을 하고 같은지 보도록 다시 정의하면 된다.
헛갈리지 않게 다시 정의한 걸 += 로 표시하면,
1 + 2 += 4
는 성립한다.무슨 시덥지 않은 소리인가 싶을텐데, 실제로 #하스켈 에서 자주 일어나는 일이다.
함수를 받으면, 그 함수를 수정할 수 있는 방법은 없습니다. 입력값, 결과값을 변형하는 함수를 합성하는 방법만 있습니다. a -> d 란 함수가 있을 때, a -> b -> c -> d 일지, a -> b -> d 일지 알 수 없습니다. 다른 말로 하면, 함수를 받는 입장에선 a ->... -> d 와 a -> d는 같습니다.
#하스켈
λ람다함수는 단순히 이름없는 함수가 아니다.
f의 결과를 이어지는 g와 h에서 각 각 가져다 쓴다면,
람다 헤드에 있는 매개 변수에 바인딩할 수 있다.
λx -> (λr -> h (g r) r) (f x)
f의 결과를 λr에 바인딩해서 g, h에서 모두 쓸 수 있게 됐다.
#하스켈
하스켈 공부를 시작하고, 펑터를 슬슬 쓰기 시작하면서, Applicative 로 넘어갈 무렵에 볼만한 글입니다. 컨텍스트란 말이 편해지면, 펑터 다음 진도에 도움이 많이 됩니다.
최근 펑터를 공부하면서, 펑터가 달리 보여 5년전 글의 컨텍스트, Applicative, Traversable 내용을 보강해 봤습니다.
https://lionhairdino.github.io/posts/2020-07-02-Context.html
예전 펑터 글에 "펑터 값을 프리미티브한 값처럼 쓰고 싶다"라는 목표를 먼저 세우고, `<$>`와 `<*>`등을 살펴보는 내용을 추가했습니다.
https://lionhairdino.github.io/posts/2023-03-09-functor.html
몇 일 전 올렸던 프리모나드 글에 이어지는, 아주 아주 간단한 DSL 예시 올렸습니다.
https://lionhairdino.github.io/posts/2024-12-22-freeMonadDSL.html
#하스켈 #Free모나드 #모나드 #함수형
" Free모나드 는 공짜라서 Free 모나드가 아닙니다. "
https://lionhairdino.github.io/posts/2024-12-15-freeMonadV2.html
하스켈 을 공부하고 있고, 모나드 를 알고 있는 분들 중, Free 모나드가 손에 잘 잡히지 않는 분들이 볼만한 상상 글입니다.(쉽게 쓰려고 수학을 뺀 게 아니라, 몰라서 수학적인 건 없습니다.)(SNS를 시작한지 얼마 안되어, 여기 저기 모두 올려 봅니다. 중복 정보를 받으시는 분들은 이해 부탁 드립니다.)