Haskell 无法将[Char]与实际类型(可能是a)绑定

Haskell 无法将[Char]与实际类型(可能是a)绑定,haskell,ghc,ghci,Haskell,Ghc,Ghci,所以我有这个: lstDelete :: [Char] -> Lst a -> Lst a lstDelete k inp@(lstNode key) | k == key && lstIsEmpty = Map.delete key (Map.fromList inp) 问题是,k的类型是[Char],key的类型可能是a: data Lst a = lstNode (Maybe a) 所以我得到的错误是: Couldn't match expected

所以我有这个:

lstDelete :: [Char] -> Lst a -> Lst a
lstDelete k inp@(lstNode key)
    | k == key && lstIsEmpty = Map.delete key (Map.fromList inp)
问题是,k的类型是[Char],key的类型可能是a:

data Lst a = lstNode (Maybe a)
所以我得到的错误是:

Couldn't match expected type ‘[Char]’ with actual type ‘Maybe a’

如何在不更改lstDelete::[Char]->lsta->lsta的情况下修复此问题?我还想保留a,因为我希望它也能为空。

您的代码有几个问题:

构造函数名称应以大写字母开头。 您的列表只能包含一个值

lstDelete没有任何意义。它接受[Char]作为键,Lst作为列表。没有办法比较它们,也没有可以接受这些参数的非平凡函数。您应该将类型更改为

或者写得更一般一些

   lstDelete :: Eq a => a -> Lst a -> Lst a
Map.fromList接受[k,v],不能将Lst a传递给它。 未定义lsistempty。
您的代码有几个问题:

构造函数名称应以大写字母开头。 您的列表只能包含一个值

lstDelete没有任何意义。它接受[Char]作为键,Lst作为列表。没有办法比较它们,也没有可以接受这些参数的非平凡函数。您应该将类型更改为

或者写得更一般一些

   lstDelete :: Eq a => a -> Lst a -> Lst a
Map.fromList接受[k,v],不能将Lst a传递给它。 未定义lsistempty。
你能描述一下这个函数应该做什么吗?比如,lstDelete foo LstNode 42的输出是什么?Map.delete是什么?地图。从列表?LSISEMPTY?你能描述一下这个函数应该做什么吗?比如,lstDelete foo LstNode 42的输出是什么?Map.delete是什么?地图。从列表?我是空的?
   lstDelete :: Eq a => a -> Lst a -> Lst a