三天后我有一个 Haskell 考试,所以我想我应该练习一下并提取过去的考试,其中一个具有以下 Tree 数据类型:
data Tree a = Leaf1 a | Leaf2 a a | Node (Tree a) (Maybe (Tree a)) deriving (Eq, Ord, Show)
Run Code Online (Sandbox Code Playgroud)
起初看起来并不那么具有挑战性,但后来我意识到我必须为这棵树编写一个 Traversable 实例。处理树叶很容易:
instance Traversable Tree where
traverse f (Leaf1 a) = Leaf1 <$> f a
traverse f (Leaf2 a b) = Leaf2 <$> f a <*> f b
Run Code Online (Sandbox Code Playgroud)
但是,我开始遇到 Node.js 的问题。
traverse f (Node t Nothing) = Node <$> traverse f t <*> Nothing
traverse f (Node l (Just r)) = Node <$> …Run Code Online (Sandbox Code Playgroud)