後一歩?


splitAt2' n = (flip(map) . flip(map) [take,drop] . flip($)) n.flip($)

f::(i->(a->b)->c) 、g::(a->b) のとき
f(n).g = k(n) となるようなk::(i->c) を作れればいいのかな・・

・・・flip(f) g??

  • 型とにらめっこ。
*Main> :t (flip(map) . flip(map) [take,drop] . flip($))
       Int -> (([a] -> [a]) -> [b]) -> [[b]]

*Main> :t (flip(map) . flip(map) [take,drop] . flip($)) 5
       (([a] -> [a])->[b])-> [[b]]

*Main> :t (flip(map) . flip(map) [take,drop] . flip($)) 5 . flip($)
       [a] -> [[a]]

*Main> :t flip($)
       [b1] -> ([b1] -> [b]) -> [b]

                                                             
*Main> :t flip((flip(map) . flip(map) [take,drop] . flip($)))

       (([a]-> [a])-> b)-> Int -> [b]
                                                                    
splitAt' :: Int -> [a] -> [[a]]