gpt4 book ai didi

haskell - 如何在 Haskell 中获取 range 函数的类型签名?

转载 作者:行者123 更新时间:2023-12-04 16:24:40 25 4
gpt4 key购买 nike

Haskell 中的许多由 Haskell 中的特殊字符组成的函数都是中缀函数。其中包括 * , + , == , /等。要获得此类函数的类型签名,请将函数放在括号中并执行 :t ,像这样:

GHCi> :t (==)
(==) :: Eq a => a -> a -> Bool

我想尝试获取范围函数的类型签名, [a..a] , 但好像这个函数是中缀的,而且只能在列表中使用 [] .我尝试了以下所有方法,但都没有奏效:
GHCi> :t (..)
<interactive>:1:2: parse error on input `..'
GHCi> :t ([..])
<interactive>:1:3: parse error on input `..'
GHCi> :t [..]
<interactive>:1:2: parse error on input `..'
GHCi> :t ..
<interactive>:1:1: parse error on input `..'

有谁知道如何获取范围函数的类型签名?

最佳答案

..不是函数,它实际上是语法糖。它被翻译成以下几个函数之一:enumFrom , enumFromThen , enumFromToenumFromThenTo .

它不可能是一个正常的功能,因为它有四种以不同方式工作的形式。也就是说,所有这四个都是有效的:

[1..]     -- enumFrom 1
[1,2..] -- enumFromThen 1 2
[1..10] -- enumFromTo 1 10
[1,2..10] -- enumFromThenTo 1 2 10

这些表格分别使用了我提到的四个功能。

如果只是普通的运算符, 1..会给你一个部分应用的功能;相反,它会生成一个列表。此外,对于正常功能, [1,2..10]符号将被解析为 [1,(2..10)]实际上,这一切都变成了一个以所有三个数字作为参数的函数。

这些函数都是 Enum 的一部分。类,所以 ..符号适用于属于它的任何类型。例如,您可以写 [False ..]并获取列表 [False, True] . (不幸的是,由于当前的解析不明确,你不能写 [False..] 因为它假设 False 是一个模块。)

关于haskell - 如何在 Haskell 中获取 range 函数的类型签名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14640936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com