[%]
하스켈 오늘의 발견
다믜(damhiya)
2021-03-08 19:13
추천 1
fmap2 :: (Functor f1, Functor f2) => (a -> b) -> f1 (f2 a) -> f1 (f2 b)
fmap2 = fmap . fmap
for :: Functor f => f a -> (a -> b) -> f b
for = flip fmap
infixr $:
($:) :: (Functor f, Functor g) => f (g a) -> (a -> b) -> f (g b)
($:) = flip fmap2
infixr $*
($*) :: Functor f => f a -> (b -> c) -> (a -> b) -> f c
f $* g = for f $: g
infixr $$
($$) :: (Functor f, Functor g) => f a -> g b -> (a -> b -> c) -> f (g c)
f $$ g = for f $: for g
λ
> ((+1) $* (*4) $* id $* (+10) $$ const 1) (,,,,) 0 3 5 7 2
(1,12,5,17,1)
$*랑 $$연산자를 쓰면 맨 아래같은 코드를 작성할 수 있음
(f1 $* f2 $$ f3) g x1 x2 x3 = g (f1 x1) (f2 x2) (f3 x3)
이런 느낌의 코드가 임의의 인자갯수에 대해서 가능한거
댓글 1