簡體   English   中英

在具有多個類型類的自定義數據類型上使用仿函數/求和論?

[英]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.

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