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

时间:2019-02-05 04:11:46

标签: haskell ghc ghci

所以我有这个:

public void CreateJoke()
{
    var client = new RestClient("https://icanhazdadjoke.com/");
    client.AddDefaultHeader("user-agent", "Dadbot");

    var request = new RestRequest("https://icanhazdadjoke.com/");
    var response = client.Get(request);
    lblJoke.Text = response.Content;
}

问题是,k的类型为[Char],而键的类型为(也许是a):

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

所以我收到错误消息:

data Lst a = lstNode (Maybe a)

如何在不更改Couldn't match expected type ‘[Char]’ with actual type ‘Maybe a’ 的情况下解决此问题?我也想保留lstDelete :: [Char] -> Lst a -> Lst a,因为我也希望它也可以为空。

1 个答案:

答案 0 :(得分:9)

您的代码有几个问题:

  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未定义。