0

我有这个编码功能:

class Encode a where
  encode :: a -> [Bit]

我在编写一个将 a 类型列表编码为位列表的函数时遇到问题。我想对列表的元素进行递归编码。据我了解,您可以为此目的使用地图功能。问题是 encode 返回一个列表 [Bit],而 map 只需要 Bit。我该如何解决这个问题?这是程序的相关部分。

instance Encode a => Encode [a] where
    encode [] = [I, O, O, I, O, I]
    encode m = ([I, O, O] ++ (map encode m) ++ [I, O, I])
4

1 回答 1

6

使用concatMap. 它在对它们执行 pingconcat操作后生成结果map

instance Encode a => Encode [a] where
    encode [] = [I, O, O, I, O, I]
    encode m = ([I, O, O] ++ (concatMap encode m) ++ [I, O, I])

你怎么能自己找到这个:如果你搜索你想要的函数的类型,(a -> [Bit]) -> [a] -> [Bit]使用HoogleconcatMap是第一个结果。

于 2013-05-09T18:08:26.647 回答