如何在Haskell中获得范围函数的类型签名?

如何在Haskell中获得范围函数的类型签名?,haskell,types,Haskell,Types,Haskell中由特殊字符组成的许多函数都是中缀函数。其中包括*,+,==,/,等等。要获取此类函数的类型签名,请将函数放在括号中并执行:t,如下所示: GHCi> :t (==) (==) :: Eq a => a -> a -> Bool 我想尝试获取范围函数的类型签名,[a..a],但该函数似乎是中缀函数,但只能在列表中使用。我尝试了以下所有方法,但均无效: GHCi> :t (..) <interactive>:1:2: parse error

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 `..'
GHCi>:t(…)
:1:2:输入“..”时分析错误
GHCi>:t([…])
:1:3:输入“..”时分析错误
GHCi>:t[…]
:1:2:输入“..”时分析错误
GHCi>:t。。
:1:1:输入“..”时分析错误
有人知道如何获取范围函数的类型签名吗?

尝试使用lambda

> :t \x y -> [x..y]

该符号只是
enumFrom
enumFromTo
的语法糖,因此它实际上没有常规类型。

不是一个函数,它实际上是语法糖。它被转换为几个函数之一:
enumFrom
enumFromThen
enumFromTo
enumFromThenTo

它不可能是一个普通函数,因为它有四种形式,它们以不同的方式工作。也就是说,这四项都是有效的:

[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
是一个模块。)