haskell - 无法将 [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
因为我也希望它能够为空。
解决方案
您的代码有几个问题:
- 构造函数名称应以大写字母开头。
data Lst a = LstNode (Maybe a)
您的列表只能包含一个值
lstDelete
没有任何意义。它接受[Char]
作为键和Lst a
列表。没有办法比较它们(没有可以接受这些参数的重要函数)。您应该将类型更改为
lstDelete :: [Char] -> Lst [Char] -> Lst [Char]
或者写更通用的
lstDelete :: Eq a => a -> Lst a -> Lst a
Map.fromList
接受[(k, v)]
,你不能传递Lst a
给它。lstIsEmpty
没有定义。
推荐阅读
- jenkins - 检查资源是否被锁定
- javascript - 如何从 jQuery 中的引用页面获取 URL
- asp.net-core-2.1 - [FromForm]、[FromQuery]、[FromBody]、[FromHeader]、[FromQuery]、[FromRoute]
- java - 为什么我的 Rest Assured POST 方法不能接受所有主机?
- wpf - WPF - 访问不同命名空间中的静态类
- html - 如何在 Angular 4 中设置背景图像
- python - 网络扫描程序脚本返回问号
- c# - 将我的 3 个列表项添加到仅 1 个列表<> 项
- java - 我在使用 RecyclerView 应用 SearchView 时遇到问题
- python - Telegram bot python 向用户发送多条消息