Haskell 中的 Functor、Applicative 和 Monad 详解
1. 从 PlayerData 到 Countable 类型
在 Haskell 编程中,我们常常会遇到一些类型设计上的挑战。例如,在尝试定义 liftA2PD 函数时:
liftA2PD :: (a->b->c) -> PlayerData a -> PlayerData b -> PlayerData c
liftA2PD func (PlayerData deck1 sa) (PlayerData deck2 sb) = PlayerData ??? (func sa sb)
这里会面临一个问题,当两个 PlayerData 包含不同的 deck 时,如何合理地组合它们是个难题,而且不破坏 Applicative 法则。这也暗示了 PlayerData 类型设计可能不是最优的。
为了更好地理解和解决这类问题,我们引入了 Countable 类型,它用于记录函数调用的次数:
data Countable a = Countable Int a deriving (Show)
我们希望将 a -> b 类型的函数转换为 Countable a -&g
超级会员免费看
订阅专栏 解锁全文
831

被折叠的 条评论
为什么被折叠?



