- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Haskell 的新手,正在尝试编写一个类似于 take
的函数,即从指定列表中返回指定数量的项目。我的代码如下:
take' :: (Num i, Ord a) => i -> [a] -> [a]
take' 0 _ = []
take' _ [] = []
take' n (x:xs) = x : take' (n - 1) xs
但是,当我尝试编译它时,我收到以下错误:
Could not deduce (Eq i) arising from the literal ‘0’
from the context (Num i, Ord a)
bound by the type signature for
take' :: (Num i, Ord a) => i -> [a] -> [a]
at recursion.hs:1:10-42
Possible fix:
add (Eq i) to the context of
the type signature for take' :: (Num i, Ord a) => i -> [a] -> [a]
In the pattern: 0
In an equation for ‘take'’: take' 0 _ = []
我认为该错误是由于 Haskell 无法将 0 识别为类类型 Num 的成员而引起的,但我不确定。任何人都可以向我解释错误并告诉我如何解决它。
最佳答案
针对文字数字的模式匹配脱糖到相等性检查。所以
take' 0 _ = []
成为
take' x _ | x == 0 = []
(其中 x
被选为子句中其他任何地方未提及的变量)。所以要支持这个模式,你需要拿的东西的数量不仅仅是一个Num
,还要支持(==)
!这就是错误的这一部分所说的:
Could not deduce (Eq i) arising from the literal ‘0’
In the pattern: 0
In an equation for ‘take'’: take' 0 _ = []
您可以只采用 GHC 在错误中建议的修复:
Possible fix:
add (Eq i) to the context of
the type signature for take' :: (Num i, Ord a) => i -> [a] -> [a]
因此:
take' :: (Eq i, Num i, Ord a) => i -> [a] -> [a]
之后您可以考虑是否需要 Ord a
约束。 =)
关于haskell - 无法从文字 ‘0’ 中推断出 (Eq i),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42304653/
基础问题 我要解决的基本问题是: 我有一个模板参数包 ArgTypes,我需要用包装在 std::optional 中的每个类型创建一个元组。例如:make_optional_tuple应该返回 st
我使用 createEntityAdapter 设置了一个简单的 redux store。初始状态包含实体、ID、状态、错误设置等 const carouselEventAdapter = creat
我有一些(遗留)代码,如下所示: void castFoo(string type, void* foo) { FooA* foo_a = NULL; FooB* foo_b = NULL;
我的代码是 const int *const ptrA = nullptr; auto *ptrB = &ptrA; 我对 const int *const ptrA 的看法是: (*
我目前正在尝试用 C++ 实现 XOR 链表。我尝试使用模板使其通用。编译时会弹出此错误,我无法解决这个问题。 我尝试使用模板在谷歌上搜索 XOR 链表,但到目前为止似乎还没有实现它。 异或链表.h:
我正在尝试找到一种方法来调用多个类成员函数,每个函数都有不同的参数,并且在调用前后会发生某些已知功能。 这个包装函数是我试过的,但是例如对它的最终调用不会编译错误: 'bool Wrapper(Wor
此代码在 上编译成功g++ ( Coliru ) ,但不是 Visual C++ ( rextester ) - 在线和我的桌面。 它是一个更大的 Visual Studio 2015 项目的简化版本
我正在尝试编写一个通用类,它传递一个键 key 对应于一组已知接口(interface)中的一个的键,稍后可以传递一个对象 thing 并类型安全地访问 thing[key]。这是我得到的: inte
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我是一名优秀的程序员,十分优秀!