如何在Haskell的Prelude中指定值的类型?

时间:2016-02-18 04:29:13

标签: parsing haskell types

我知道Haskell能够推断出一个值的类型,但是我希望指出它,我试过了:

Prelude> a=2 :: Float

<interactive>:8:2: parse error on input ‘=’
Prelude> Float a=2 :: Float

<interactive>:9:8: parse error on input ‘=’
Prelude> let a::Float = 2

<interactive>:10:8:
    Illegal type signature: ‘Float’
      Perhaps you intended to use ScopedTypeVariables
    In a pattern type-signature
Prelude> let a::Int = 2

<interactive>:11:8:
    Illegal type signature: ‘Int’
      Perhaps you intended to use ScopedTypeVariables
    In a pattern type-signature

没有成功。如何实现呢?

BTW,似乎在Haskell中(几乎)是一个函数并且是不可变的。所以我应该打电话给&#34; a&#34;:

1. An object? (FP is not OOP)
2. Or, a function?
3. Or, a variable?
4. Or, a value?

不确定Haskell喜欢什么术语? 感谢。

2 个答案:

答案 0 :(得分:3)

Prelude> let a = 2 :: Int
Prelude> a
2

a是一个值,它不是一个函数(但函数是值)。

答案 1 :(得分:3)

ghci是一个交互式控制台,所以,你不能只写a = 2 :: Float,你必须使用let形式:

Prelude> let a = 2 :: Float
Prelude> a
2.0
Prelude> :t a
a :: Float
  BTW,在Haskell中似乎一切(差不多)都是一个功能而且   不可改变的。所以我应该打电话给&#34; a&#34;:

aFloat

类型的值