我如何获得Haskell中范围函数的类型签名?
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
, 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
是一个模块。)
尝试使用lambda。
> :t x y -> [x..y]
这个符号只是enumFrom
和enumFromTo
语法糖,所以它没有真正的传统类型。
上一篇: How do I get the type signature of the range function in Haskell?
下一篇: Why is function definition for all types at once not allowed in Haskell?