後一歩?
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]]