- 732 名前:デフォルトの名無しさん mailto:sage=721 [03/07/19 22:54]
- >>726
>よくわからない。ダイナミックに関数を作ると? その通り。 (.) が関数を合成するのと同じように。 >関数ポインタの配列をつくっておいて並べ替えるのかな。 引数等を保存しておく必要があるので、それをすると、λと変わらないと思う。 >>722 無理しているので、return a >>= k = k a が成り立たなくなってたりしているので注意。 ついでに、前に作ったモナドをどうぞ。 面倒を少し減らす程度のものですが。 --- module Main where --type ReadS a = String -> [(a,String)] newtype ReadR v = ReadR { runr :: ReadS v} instance Monad ReadR where ReadR r >>= fr = ReadR (\str -> [ret| (v,str') <- r str, ret <- fr v `runr` str']) return v = ReadR (\str -> [(v, str)]) rread :: (Read a) => ReadR a rread = ReadR reads rlex :: ReadR String rlex = ReadR lex test :: String -> (Int,String) test str = head test' where test' = do rread `runr` str --- Main> test "125 " (125," ")
|

|