haskell - Haskell中如何确定文字的类型?

标签 haskell types literals

当我测试 GHCi 中的文字类型时,我发现

Prelude> :t 1
1 :: Num p => p

Prelude> :t 'c'    
'c' :: Char

Prelude> :t "string"    
"string" :: [Char]

Prelude> :t 1.0
1.0 :: Fractional p => p

问题是Haskell如何确定这种文字的类型?我在哪里可以找到相关信息?

此外,是否有任何方法可以改变GHC解释文字类型的方式?

例如:

 -- do something

 :t 1
 1 :: Int      -- interprets 1 as Int rather then Num p => p

 :t 1.0
 1.0 :: Double -- interprets 1.0 as Double rather then Fractional p => p 

提前致谢。

最佳答案

您可以要求 ghci 默认类型变量:

$ ghci
λ> let x = 3
λ> :type x
x :: Num p => p
λ> :type +d x
x :: Integer
λ> :type +d 1
1 :: Integer
λ> :type +d 1.0
1.0 :: Double

:type +d 将使 ghci 选择类型变量的默认类型。另外,这是一般的 Haskell 默认规则:

default Num Integer
default Real Integer
default Enum Integer
default Integral Integer
default Fractional Double
default RealFrac Double
default Floating Double
default RealFloat Double

您可以了解更多about it here .

关于haskell - Haskell中如何确定文字的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52771596/

相关文章:

parsing - 如何根据输出消耗的数据量使该解析代码变得懒惰?

haskell - 无法将预期类型 `Int' 与实际类型 [Int] 匹配

literals - PyParsing:是否可以全局抑制所有文字?

haskell - 如何将系统时间传递给 Haskell 中的变量

php - 解析 SQL 结构的正则表达式

c# - 在 C# 中测试对象是否为泛型类型

c++ - 使用 C++ 模板封装简单类型

Java Thread.sleep long 还是 int?

c# - 奇怪的跨线程 UI 错误

haskell - 类型奥秘。为什么这段代码可以编译?