ああ、つまり昨日のコードを抽象化・簡略化して、
nonDet :: (a -> b) -> [a] -> [b] nonDet f xs = do x <- xs return (f x)
を考えると、f :: a -> b がモナドに乗っかった世界でいろんな値を返し得ると言うこと?でも入力のxがそもそもいろんな値取ってくるんだし、ってそうか、
nonDet :: (a -> b) -> [a] -> [b] nonDet f xs = xs >>= (\x -> return (f x))
こう書きなおしたときに、最後のλ式のxに入ってくる値が何来るかわからん(複数入ってくる)よ、ってことですか。要はリストモナドのときの
(>>=) : List(a) -> (a -> List(b)) -> List(b)*1
のaんとこが「多値」、だからList(a)を受け取ったときの戻り値である
g:(a -> List(b)) -> List(b)
も「多値」、とどのつまり、(>>=)が「多値関数」になるよって事なんですかね。*2…なんて朝風呂入りながら何を考えているんだろう、俺w
でも、やっぱわかんね。これ非決定性って言っていいのかなぁ。非決定性の模倣はできると思うけど。*3
って大元の議論はこちらのコメントからです。