考慮以下應用背景關系 f。我有一個圍繞此背景關系 F = f [a -> a] 的函式串列和一個圍繞同一背景關系(即 V = f [a])的值串列。現在我想將 F 中的函式應用于 V 中的值。如何實作?
我嘗試了以下方法:
1. (F <*>) <*> V
2. (V <*>) (F <*>)
但由于某種原因,型別不匹配。
uj5u.com熱心網友回復:
型別在 1 中不匹配,因為兩個<*>s 在同一“層”,并且它們在 2 中不匹配,因為您試圖將值呼叫為函式。(還有其他問題,但這應該足以說明它們為什么不起作用。)您正在尋找以下兩個運算式之一:
(<*>) <$> f <*> v
liftA2 (<*>) f v
請記住,在 Haskell 中,變數以小寫字母開頭,資料建構式以大寫字母開頭。
uj5u.com熱心網友回復:
這并不比使用簡單liftA2,但有趣的是,兩個應用函子的組合本身就是一個應用函子。
> import Data.Functor.Compose
> getCompose $ Compose (Just [( 1)]) <*> Compose (Just [5])
Just [6]
> getCompose $ Compose ([Just ( 1)]) <*> Compose ([Just 5])
[Just 6]
<*>“挖掘”其運算元的順序是從包裝值的型別推斷(或由其定義)。例如,
> :t Compose [Just 'c']
Compose [Just 'c'] :: Compose [] Maybe Char
> :t Compose (Just ['c'])
Compose (Just ['c']) :: Compose Maybe [] Char
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/528513.html
標籤:哈斯克尔λ演算
上一篇:為FFI測驗生成有狀態函式指標
下一篇:Haskell函式
