haskell - 如何定义 Integral a => a 类型的函数?
问题描述
我们刚开始在 uni 学习 Haskell,在我的一个作业问题中,我们必须为这种类型签名定义一个函数:
f1 :: Integral a => a
老实说,我仍在尝试了解一些有关 Haskell 的基础知识,但我知道使用Integral
, 你可以做mod
和div
,以及你可以用, 和Num
做+
的那些。-
*
所以我可以写
f1 :: Integral a=> a -> a
f1 k = k `mod` k
它会起作用。但随着
f1 :: Integral a => a
好像没有输出。
我怎样才能用这个写一些在解释时不会出错的东西?
解决方案
你是对的,Integral
没有那种形状的东西。但是Integral
还有很多其他的东西,如果我们向上追溯层次结构,我们会看到 everyIntegral
是 a Num
,并且 eachNum
有
fromInteger :: Num a => Integer -> a
所以,对于你的功能,我们可以写
f1 :: Integral a => a
f1 = fromInteger 0
或者
f1 :: Integral a => a
f1 = fromInteger 42
或者,坦率地说,选择你最喜欢的号码。
此外,由于 Haskell 的魔法,字面量42
实际上是fromInteger 42
(字面量42
,在 Haskell 中,有 type Num a => a
。所以这个函数也足够了。
f1 :: Integral a => a
f1 = 42
推荐阅读
- zend-framework3 - ZF3 向会话验证器添加可信代理时出现问题
- angular - NgbDatePicker :专注于输入框
- c# - 控制如何、何时以及是否绘制子控件 (.NET)
- r - 获取每个元素的平均值
- mysql - 为什么我的 AND 语句在 MySQL/PHPMyAdmin 中不起作用
- java - 如何将属性文件加载到 Java 中?
- javascript - 数据未添加到数据库中(firebase)
- jquery - 有没有办法使用元素 innerHTML 作为 keyCode 编号?
- oracle - Oracle Apex,是否可以从远程服务器连接 excel 文件或 csv?
- c# - 如何使用 TFS 2015 上的 devops api 检索所有“项目集合”的列表