これは、これを見た後にモナド関数を理解する私の試みです。
h
を使用bind
して、2 つの任意の関数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