簡體   English   中英

申請人的立交法

[英]Applicative's Interchange Law

應用程序編程與效果 ,McBride和Paterson的論文,提出了交換法

u <*> pure x = pure (\\f -> fx) <*> u

為了嘗試理解它,我嘗試了以下示例 - 表示左側。

ghci> Just (+10) <*> pure 5
Just 15

我怎么能用右手邊寫這個例子?

另外,如果uf (a -> b) ,其中fApplicative ,那么右邊的函數是什么: pure (\\f -> fx) ...

它將寫成

pure (\f -> f 5) <*> Just (+10)

甚至

pure ($ 5) <*> Just (+10)

在這種情況下兩者都是等價的。 從字面上看,你用一個pure函數包裝一個函數,它接受另一個函數作為它的參數,然后將x應用於它。 你提供f作為Just的內容,在這種情況下是(+10) 當你看到(\\f -> fx)的lambda語法時,它是非常文字的,這是一個用於這個定義的lambda。

這個定律的關鍵是關於Applicative Functor保持指數:在原點中指數是什么,在類別的圖像中也是指數。

請注意, Applicative Functor的實際操作是以下類型的轉換: strength :: (fa, fb) -> f (a, b) ; 然后ap<*>只是對結果的fmap eval ,或者,寫得完全, ap = curry $ fmap (uncurry ($)) . strength ap = curry $ fmap (uncurry ($)) . strength

這個定律然后說,因為在原點g $ x == ($ x) $ g ,提升($)x($ x)應該保持平等。 注意,“正常” Functor只有在g被提升時才會保持相等,但Applicative Functors將保留f (a->b)類型的任何對象代替g這種相等性。 這樣整個類型f (a->b)行為類似於fa -> fb ,而對於“normal” Functor ,它只需要像fa -> fb一樣表示原點中箭頭的圖像(使圖表通勤並履行Functor的承諾)。

至於代表法律的右手邊,你已經被建議從字面上理解, pure ($ 5) <*> Just (+10)

暫無
暫無

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

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