所以我有这个:
lstDelete :: [Char] -> Lst a -> Lst a
lstDelete k inp@(lstNode key)
| k == key && lstIsEmpty = Map.delete key (Map.fromList inp)
Run Code Online (Sandbox Code Playgroud)
问题是,k的类型为[Char],键的类型为(Maybe a):
data Lst a = lstNode (Maybe a)
Run Code Online (Sandbox Code Playgroud)
所以我收到的错误是:
Couldn't match expected type ‘[Char]’ with actual type ‘Maybe a’
Run Code Online (Sandbox Code Playgroud)
如何在不改变的情况下修复此问题lstDelete :: [Char] -> Lst a -> Lst a?我也想保留,Maybe a因为我希望它也可以是空的.
您的代码有几个问题:
data Lst a = LstNode (Maybe a)
Run Code Online (Sandbox Code Playgroud)
您的列表只能包含一个值
lstDelete没有任何意义.它接受[Char]为关键和Lst a列表.没有办法比较它们(没有可以接受这些参数的非平凡功能).您应该将类型更改为
lstDelete :: [Char] -> Lst [Char] -> Lst [Char]
Run Code Online (Sandbox Code Playgroud)
或写更多通用
lstDelete :: Eq a => a -> Lst a -> Lst a
Run Code Online (Sandbox Code Playgroud)
Map.fromList接受[(k, v)],你不能传递Lst a给它.lstIsEmpty 没有定义.