[英]Using functors/applicatives on custom data types with multiple type classes?
考慮具有兩個參數a和b的用戶類型。 顯然,這使用戶可以由兩種不同的類型組成:
data Users a b = User a b deriving (Show, Eq, Ord)
我們如何為該實例聲明函子和應用函數?
我嘗試過這些方法無法編譯:
instance Functor Users where
fmap f(User a b) = User (f a) (f b)
instance Applicative Users where
pure a b = User a b
(<*>) User a b = (fmap a) (fmap b)
這些文件無法編譯的原因是什么?
看一下Data.Bifunctor
中用於ADT的類型類,這兩個函數都是函數性的。 然后, User
只是元組的一個奇特的名稱,並且該名稱已經支持這樣的實例。 在Haskell中可以導出bifunctor實例。
@Bakuriu指出定義User
作為newtype
和使用擴展GeneralizedNewtypeDeriving
。
對於第二個,請參見Biapplicative
。 可以預期,其(,)
實例為:
instance Biapplicative (,) where
pure = (,)
ap (f, g) (a, b) = (f a, g b)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.