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

use*_*875 1 haskell ghc ghci

所以我有这个:

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因为我希望它也可以是空的.

tal*_*lex 9

您的代码有几个问题:

  1. 构造函数名称应以大写字母开头.
    data Lst a = LstNode (Maybe a)
Run Code Online (Sandbox Code Playgroud)
  1. 您的列表只能包含一个值

  2. 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)
  1. Map.fromList接受[(k, v)],你不能传递Lst a给它.
  2. lstIsEmpty 没有定义.