\a -> map ($ a)
확실히 괜찮지 만, 더 좋은 아마도 아직 약간은 Applicative
방법이다 : 인스턴스 <*> :: [a] -> [a->b] -> [b]
있다
<**> :: Applicative f => f a -> f (a -> b) -> f b
이있다. 당신이 원하는 것처럼 많이 보입니다! a
값을 싱글 톤 목록에 넣으면됩니다. Applicative
: pure
에 전용 함수가 있습니다.
apply :: Functor f => a -> f (a -> b) -> f b
apply a = fmap ($ a)
:
Applicative
그것을하지 않은 당신은 가능한 가장 일반적인 서명이처럼 보이게하기 때문에
apply :: Applicative f => a -> f (a -> b) -> f b
apply = (<**>) . pure
사실이지만, 차라리, 바인딩이 최상위에 대한 a -> [a->b] -> [b]
에 서명을 제한 할 것
정말, 내 솔루션은 아마도 당신이 어떤 파이프 라인에있을 때, 나는 최선을 apply
을 정의 할 수 있지만 코드에서 직접 (<**>) . pure
을 사용하면 가장 좋습니다.
적용법에 따라 '((<**>). 순수) yu == u <*> 순수 y == 순수 ($ y) <*> u == fmap ($ y) u'는 모든'적용 ' 마지막은 좀 더 일반적입니다. –