Haskell:使用带有返回列表的函数的map?

use*_*390 0 haskell list map

我有这个编码功能:

class Encode a where
  encode :: a -> [Bit]
Run Code Online (Sandbox Code Playgroud)

我在编写一个函数时遇到问题,该函数将类型a的列表编码为位列表.我想递归编码列表的元素.根据我的理解,您可以使用map函数来实现此目的.问题是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])
Run Code Online (Sandbox Code Playgroud)

dav*_*420 6

使用concatMap.concatmapping它们之后它会显示结果.

instance Encode a => Encode [a] where
    encode [] = [I, O, O, I, O, I]
    encode m = ([I, O, O] ++ (concatMap encode m) ++ [I, O, I])
Run Code Online (Sandbox Code Playgroud)

你怎么能为自己找到这个:如果你搜索你想要的功能类型(a -> [Bit]) -> [a] -> [Bit],使用Hoogle,concatMap是第一个结果.

  • 你甚至不需要特殊情况下的空列表@ user2367390,它也被第二个等式所覆盖. (6认同)