首页 > 解决方案 > 无法将 [Char] 与实际类型绑定(可能是 a)

问题描述

所以我有这个:

lstDelete :: [Char] -> Lst a -> Lst a
lstDelete k inp@(lstNode key)
    | k == key && lstIsEmpty = Map.delete key (Map.fromList inp)

问题是,k 属于 [Char] 类型,而 key 属于 (Maybe a) 类型:

data Lst a = lstNode (Maybe a)

所以我收到错误消息:

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

我怎样才能在不改变的情况下解决这个问题lstDelete :: [Char] -> Lst a -> Lst a?我也想保留它,Maybe a因为我也希望它能够为空。

标签: haskellghcghci

解决方案


您的代码有几个问题:

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

  2. lstDelete没有任何意义。它接受[Char]作为键和Lst a列表。没有办法比较它们(没有可以接受这些参数的重要函数)。您应该将类​​型更改为

   lstDelete :: [Char] -> Lst [Char] -> Lst [Char]

或者写更通用的

   lstDelete :: Eq a => a -> Lst a -> Lst a
  1. Map.fromList接受[(k, v)],你不能传递Lst a给它。
  2. lstIsEmpty没有定义。

推荐阅读