http://haskell.g.hatena.ne.jp/hyuki/20060605/splitat

疑問のところについて考えてみる。

  • 最初に思いついた形

zipWith (\f x -> f x) (zipWith (\f x -> f x) [take,drop] (replicate 2 n)) (replicate 2 xs)

  • 関数適用は$だね

zipWith ($) (zipWith ($) [take,drop] replicate 2 n) (replicate 2 xs)

  • mapで出来るんじゃ・・・[m,n]は(m,n)に変形しとこう

case map ($ xs) $ map ($ n) [take,drop] of [m,n] -> (m,n)

  • パターンマッチ慣れてないから無名関数で変形した方が分かりやすい

(\[a,b]->(a,b)) (map ($ xs) $ map ($ n) [take,drop] )

  • nやxsを後の方に置いてみよう.ポイントフリー記法が分からない・・

(\[a,b]->(a,b)) (flip(map) ( flip(map) [take,drop] ($ n)) ($ xs))

  • 戻そう。そういえば最初の形は(take,drop)じゃないとダメなのか

(\[a,b]->(a,b)) (map ($ xs) (map ($ n) (map ($ (take,drop)) [fst,snd] )) )

  • 一見畳み込める(?)気がしたけど型が合わなくて残念。

結局分からなかった。いつか関数合成や部分適応を使いこなしたい。