Haskell 哈斯凯尔树上的地图
我如何定义一个像map一样工作但在树上工作的函数?新功能的打字签名为:Haskell 哈斯凯尔树上的地图,haskell,Haskell,我如何定义一个像map一样工作但在树上工作的函数?新功能的打字签名为: data Tree a = Empty | Node a (Tree a) (Tree a) map :: (a -> b) -> [a] -> [b] 甚至可以为map创建一个通用的typeclass吗?该typeclass已经存在于Prelude: 要实现它,您可以使用语言扩展,这样GHC就可以通过派生子句为您实现它: class Functor f where fmap :: (a -&g
data Tree a = Empty | Node a (Tree a) (Tree a)
map :: (a -> b) -> [a] -> [b]
甚至可以为map创建一个通用的typeclass吗?该typeclass已经存在于Prelude: 要实现它,您可以使用语言扩展,这样GHC就可以通过
派生
子句为您实现它:
class Functor f where
fmap :: (a -> b) -> f a -> f b
或者,您也可以手动实现它:
{-# LANGUAGE DeriveFunctor #-}
data Tree a = Empty | Node a (Tree a) (Tree a) deriving (Functor)
mapTree :: (a -> b) -> Tree a -> Tree b
mapTree = fmap
{-# LANGUAGE DeriveFunctor #-}
data Tree a = Empty | Node a (Tree a) (Tree a) deriving (Functor)
mapTree :: (a -> b) -> Tree a -> Tree b
mapTree = fmap
data Tree a = Empty | Node a (Tree a) (Tree a)
mapTree :: (a -> b) -> Tree a -> Tree b
mapTree _ Empty = Empty
mapTree f (Node x l r) = Node (f x) (mapTree f l) (mapTree f r)
instance Functor Tree where
fmap = mapTree