Haskell新手。 所以(<$>)
定義爲(<*>),而不必在此包裝第二個參數
(<$>) :: Functor f => (a -> b) -> f a -> f b
而且(<*>)
被定義爲
(<*>) :: Applicative f => f (a -> b) -> f a -> f b
但我覺得Applicative
是一個兩個概念:
- 一個將是一個函子 的
- 而一個會是這樣的:
([email protected]>) :: MyConcept m => m (a -> b) -> a -> b
例如,根據Maybe
:
我有一個let i = 4
,我有一個let foo = Nothing :: Num a => Maybe (a -> a)
。 基本上我有一個函數,可能會或可能不會在那裏,需要一個Int並返回一個Int,並且一個實際的Int。
當然我也只是說換i
:
foo <*> Just i
但是,這要求我知道什麼應用型foo
被包裹在 有什麼等效於這裏描述的我?我將如何去執行我自己的功能<@>
?
這將是這樣的:
let (<@>) func i = func <*> ??? i
謝謝! 「純」不是以某種方式誤導?從名字上我會想到完全相反。例如'讓不純= pure :: a - > IO a'。有什麼理由嗎? – hgiesel
@hgiesel它是[只是一個名字](http://stackoverflow.com/questions/3435308/naming-of-pure-function-in-control-applicative)和純度無關。 – erisco
@hgiesel我把'pure x'讀爲「在應用中注入純粹的價值'x」(即使這個讀法意味着應用價值在某種程度上是不純的,但情況並非如此......) – chi