在Haskell中将列表拆分为列表列表

在Haskell中将列表拆分为列表列表,haskell,Haskell,decodeText应该split'将每个单词的代码分成更小的列表code。然后将单词中每个字符的code列表拆分为更小的code decodeText :: Table -> Code -> String decodeText table code= map (split' shortGap) (split' mediumGap code) 当我加载程序时,此代码给出以下错误: Summative2-test.hs:92:25: error: • Couldn't ma

decodeText
应该
split'
将每个单词的代码分成更小的列表
code
。然后将单词中每个字符的
code
列表拆分为更小的
code

decodeText :: Table -> Code -> String
decodeText table code=  map (split' shortGap) (split' mediumGap code)
当我加载程序时,此代码给出以下错误:

Summative2-test.hs:92:25: error:
    • Couldn't match type ‘[[Atom]]’ with ‘Char’
      Expected type: String
        Actual type: [[[Atom]]]
    • In the expression: map (split' shortGap) (split' mediumGap code)
      In an equation for ‘decodeText’:
          decodeText table code
            = map (split' shortGap) (split' mediumGap code)
   |
92 | decodeText table code=  map (split' shortGap)(split' mediumGap code)
   |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Failed, one module loaded.
我不明白我在这里哪里犯了错误

我只是想在这个项目的一小部分上寻求帮助

以下是一个例子:

encodeText morseTable "THIS IS A TEST" = [Beep,Beep,Beep,Silence,Silence,Silence,Beep,Silence,Beep,Silence,Beep,Silence,Beep,Silence,Silence,Silence,Beep,Silence,Beep,Silence,Silence,Silence,Beep,Silence,Beep,Silence,Beep,Silence,Silence,Silence,Silence,Silence,Silence,Silence,Beep,Silence,Beep,Silence,Silence,Silence,Beep,Silence,Beep,Silence,Beep,Silence,Silence,Silence,Silence,Silence,Silence,Silence,Beep,Silence,Beep,Beep,Beep,Silence,Silence,Silence,Silence,Silence,Silence,Silence,Beep,Beep,Beep,Silence,Silence,Silence,Beep,Silence,Silence,Silence,Beep,Silence,Beep,Silence,Beep,Silence,Silence,Silence,Beep,Beep,Beep,Silence]
我的计划方法是首先用delimeter
[静默,静默,静默,静默,静默]
拆分
code

这将使:

[[Beep,Beep,Beep,Silence,Silence,Silence,Beep,Silence,Beep,Silence,Beep,Silence,Beep,Silence,Silence,Silence,Beep,Silence,Beep,Silence,Silence,Silence,Beep,Silence,Beep,Silence,Beep],[Silence,Beep,Silence,Beep,Silence,Silence,Silence,Beep,Silence,Beep,Silence,Beep],
[Silence,Beep,Silence,Beep,Beep,Beep],[Silence,Beep,Beep,Beep,Silence,Silence,Silence,Beep,Silence,Silence,Silence,Beep,Silence,Beep,Silence,Beep,Silence,Silence,Silence,Beep,Beep,Beep,Silence]]
然后,我尝试使用
[静默,静默]
作为delimeter来拆分每个列表

[[[Beep,Beep,Beep],[Silence,Beep,Silence,Beep,Silence,Beep,Silence,Beep],[Silence,Beep,Silence,Beep],[Silence,Beep,Silence,Beep,Silence,Beep]],[[Silence,Beep,Silence,Beep],[Silence,Beep,Silence,Beep,Silence,Beep]],
[Silence,Beep,Silence,Beep,Beep,Beep],[[Silence,Beep,Beep,Beep],[Silence,Beep],[Silence,Beep,Silence,Beep,Silence,Beep],[Silence,Beep,Beep,Beep,Silence]]]
此代码已导入:

module Types where

data Atom = Beep | Silence
  deriving (Eq, Show)

type Code = [Atom]

dit, dah, shortGap, mediumGap :: Code
dit       = [Beep, Silence]
dah       = [Beep, Beep, Beep, Silence]
shortGap  = replicate (3-1) Silence
mediumGap = replicate (7-1) Silence

type Table = [(Char, Code)]

morseTable :: Table
morseTable = [ (c , morseCode c) | c <- ['A'..'Z']++['0'..'9'] ]

解码文本的正确类型为:

decodeText :: Table -> Code -> [[[Atom]]]
decodeText table code =  map (split' shortGap) (split' mediumGap code)
您编写的类型使用
String
作为返回类型。由于
String
等于
[Char]
,编译器试图使
[[[Atom]]]]]
等于
[Char]
,因此错误
[[Atom]]
Char
不匹配。
`

“请为我编写代码”不是一个有效的堆栈溢出问题。我只是在函数的一小部分上寻求帮助。那么,除了那一部分之外,所有问题都无关紧要。
decodeText :: Table -> Code -> [[[Atom]]]
decodeText table code =  map (split' shortGap) (split' mediumGap code)