Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我如何用Haskell将人类语言单位写成后缀,比如“3秒”?_Haskell - Fatal编程技术网

我如何用Haskell将人类语言单位写成后缀,比如“3秒”?

我如何用Haskell将人类语言单位写成后缀,比如“3秒”?,haskell,Haskell,Ruby有一个很好的特性,可以将数字转换成其他东西,例如,对于迭代来说是3.times,对于转换成字符串来说是3.to\s 人们说Haskell很适合写自然的s 是否可以将单位写入后缀,例如,timeout=3秒?是。 您可以使用以下简单技巧来完成此操作: {-#语言灵活实例} 实例Num(整数->整数)其中 fromInteger n=\scale->n*scale--返回一个 --一个数字,然后返回一个数字 然后你可以写: 秒、分钟、小时、天::整数 秒=1000000——基本单位,例如微

Ruby有一个很好的特性,可以将数字转换成其他东西,例如,对于迭代来说是
3.times
,对于转换成字符串来说是
3.to\s

人们说Haskell很适合写自然的s

是否可以将单位写入后缀,例如,
timeout=3秒

是。

您可以使用以下简单技巧来完成此操作:

{-#语言灵活实例}
实例Num(整数->整数)其中
fromInteger n=\scale->n*scale--返回一个
--一个数字,然后返回一个数字
然后你可以写:

秒、分钟、小时、天::整数
秒=1000000——基本单位,例如微秒
分钟=60秒
小时=60分钟
天=24小时
soon::整数
很快=2小时+4秒

这是如何工作的?

上面我们为
Integer->Integer
提供了一个
Num
实例,用于接受整数并返回整数的函数

每个实现
Num
并定义了其函数
fromInteger
的类型都允许用数字文字表示,例如
3

这意味着我们可以编写
3::Integer->Integer
——这里
3
是一个接受整数并返回整数的函数

因此,我们可以对它应用一个整数,例如
seconds
;我们可以写
3秒
,表达式的类型为
Integer


更安全的类型版本

事实上,我们现在甚至可以编写
3(3::Integer)
——但这可能没有多大意义。我们可以通过使其更加类型安全来限制这一点:

newtype TimeUnit=TimeUnit整数
推导(等式、显示、数值)
实例Num(TimeUnit->TimeUnit)其中
fromInteger n=\(时间单位刻度)->时间单位(n*刻度)
秒、分钟、小时、天::时间单位
秒=时间单位1000000
分钟=60秒
小时=60分钟
天=24小时
现在我们只能将
TimeUnit
类型的东西应用于数字文本


您可以对所有其他单位(如重量、距离或人)执行此操作。

如果您的单位为小写,则可以使用上面给出的时间单位类型。但如果单位以大写开头,则需要为每个单位定义一个新类型或数据,并为其定义Num实例。这方面的一个例子是基本解释器

此处记录:

…它既美丽又丑陋。祝贺投了赞成票。很高兴看到我将要给出的答案。:)要得出合乎逻辑的结论,请参阅软件包。为您自动管理单元真是太棒了,但它必须使用一系列扩展,错误消息非常糟糕。这非常好,因为它允许我们删除(*),然而,我们必须注意像
3x^2
…这样的表达式。因为
3
x
之间的函数应用程序比任何中缀运算符绑定得更紧密,所以在用
x
乘以
3
之前,不可能在没有括号的情况下将其平方。这与你期望的相反。也许你应该看看。他们使用类似于
timeout=3*~seconds
。。。但是你也可以从中得到所有其他的国际单位制和前缀。