簡體   English   中英

為什么申請工作僅針對Maybe默認

[英]Why does applicative work default only for Maybe

我試圖理解為什么對於像Maybe這樣的某些函子,應用函子默認情況下會工作(無需實現),而對於其他函子卻不起作用:

例:
Just (+3) <*> (Just 3) “開箱即用”-> 6
Left (+3) <*> Left 3不起作用
即使我聲明Either Int Int Just (+3) <*> Left 4也不起作用。

我假設在99%的情況下,當處理成對的: (f (a->b) , fa)您必須自己實現所需的行為( 笛卡爾乘積 (f (a->b)) X (fa) ),並且第一個例子是開箱即用的簡單東西。

示例對於(Maybe (a->b) , Either cd)我們需要涵蓋所有4種情況:
Just - Left Just - Right Nothing - Left Nothing -Right

我在這個假設中正確嗎?

EitherApplicative實例定義為:

instance Applicative (Either e) where ...

給定的類型(<*>)Applicative f => f (a -> b) -> fa -> fbEither是:

Either e (a -> b) -> Either e a -> Either e b

Left的類型為e -> Either ea所以Left (+3)的類型為

Num a => Either (a -> a) b

Left 3的類型是:

Num a => Either a b

這導致Left (+3) <*> Left 3(Num a, Num (a -> a)) => Either (a -> a) b都不是您想要的。

由於類型b包含要操作的函數和值,因此使用Right構造函數確實可行:

Right (+3) <*> Right 3
=> Right 6

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM