이것은 this을 본 다음에 모나드 함수를 알아 내려는 시도입니다.이 간단한 모나드 예제입니까?
h
은 bind
을 사용하여 두 개의 임의 함수 인 f
과 g
을 함께 구성합니다. 이 경우 unit
연산자는 무엇입니까?
;; f :: int -> [str]
;; g :: str -> [keyword]
;; bind :: [str] -> (str -> [keyword]) -> [keyword]
;; h :: int -> [keyword]
(defn f [v]
(map str (range v)))
(defn g [s]
(map keyword (repeat 4 s)))
(defn bind [l f]
(flatten
(map f l)))
(f 8) ;; :: (0 1 2 3 4 5 6 7)
(g "s") ;; :: (:s :s :s :s)
(defn h [v]
(bind (f v) g))
(h 9)
;; :: (:0 :0 :0 :0 :1 :1 :1 :1 :2 :2 :2 :2 :3 :3 :3 :3 :4 :4 :4 :4 :5 :5 :5 :5)
아, 의견을 주셔서 감사합니다; 나는 내가 혼란 스러웠던 곳을 본다.
나는 이러한 기능을 잘 알고 있었고 바인드 사용하여 구성하는 방법 :하지만이 기능
f0 :: a -> M a
g0 :: a -> M a
을 :
f1 :: a -> M b
g1 :: b -> M c
하지만 본질적으로 bind
연산자는 두 경우 모두에 대해 동일 M
이 같은 경우 내 경우에는 M
이 모나드이므로 f1
과 g1
은 f0
과 g0
과 같은 방법으로 결합 할 수 있습니다.
조금 코멘트; 아직도 괜찮은거야? –