今日の自作関数

今日は,curry関数,uncurry関数の自作に挑戦.


先ずは,curryから.

curry' :: ((a,b) -> c) -> a -> b -> c
curry' f a b = f (a,b)

あぁ,なんかそのまんまじゃん.
hugsで実行して見る.

Main> curry' fst 1 2
1
Main> curry' snd 1 2
2

まぁちゃんと動いてるかな.


次はuncurry.

uncurry' :: (a -> b -> c) -> (a,b) -> c
uncurry' f (a,b) = f a b

はぅう,やっぱりそのまんまじゃないかっ.
hugsで実行.

Main> uncurry' (+) (1,2)
3
Main> uncurry' (++) ("hello ","world")
"hello world"

動いてくれてるので嬉しい.そりゃ動いてくれなきゃ流石に困る.


もっとエレガントなやり方はあるのかしら.