1

GHCi は、 type が typeAではないことを教えてくれAます。なんで?

>>> data A = A
>>> let x = A
>>> let id A = A
>>> 
>>> data A = A
>>> let x' = A
>>> let id' A = A
>>> 
>>> data A = A
>>>
>>> let y = id' x

<interactive>:18:13:
    Couldn't match expected type `main::Interactive.A'
                with actual type `main::Interactive.A'
    In the first argument of id', namely `x'
    In the expression: id' x
    In an equation for `y': y = id' x
4

1 に答える 1

7

GHCi は、スコーピングを扱う際にいくつかの奇妙な動作をします。これを明確に示す短いセッションを次に示します。

Prelude> data A = A
Prelude> let meh A = A
Prelude> data A = A
Prelude> meh A

<interactive>:5:5:
    Couldn't match expected type `main::Interactive.A'
            with actual type `A'
    In the first argument of `meh', namely `A'
    In the expression: meh A
    In an equation for `it': it = meh A

GHCiに関する限り、これを行った方がよいでしょう:

Prelude> data A = A
Prelude> let meh A = A
Prelude> data A' = A'
Prelude> meh A'

<interactive>:5:5:
    Couldn't match expected type `A' with actual type A'
    In the first argument of `meh', namely A'
    In the expression: meh A'
    In an equation for `it': it = meh A'

まったく異なるデータ型と見なされます。名前が同じであるだけです。

ここですべてを読むことができます。関連するセクションは 2.4.4 です。

于 2013-04-07T17:50:12.917 に答える