12

以下のセッションの最後に受け取ったエラーについて混乱しています。

$ ghci
GHCi, version 7.10.2: http://www.haskell.org/ghc/  :? for help
Ok, modules loaded: Main.
*Main> :set -XDataKinds

*Main> :t [False, True]
[False, True] :: [Bool]

*Main> :t [False]
[False] :: [Bool]

*Main> :k [False, True]
[False, True] :: [Bool]

*Main> :k [False]

<interactive>:1:2:
    Expected kind ‘*’, but ‘False’ has kind ‘Bool’
    In a type in a GHCi command: [False]

エラーの理由


今後の実験により、次のことが明らかになります。

*Main> :k [Int]
[Int] :: *

*Main> :k [Int, Int]
[Int, Int] :: [*]

[Int]値が存在する可能性があるため、親切ですが、親切*であることにも意味があり[*]ます。


もう少しデータポイント:

*Main> :k []
[] :: * -> *

*Main> :k [Bool]
[Bool] :: *
4

2 に答える 2

11

要素が 1 つしかない型レベルのリストがある場合、GHC はそれをリフトされたリストではなく、ある種の型に適用された通常のリスト型コンストラクターと見なし*ます。

リフトされたリストを明示的に選択するには、リストの前にアポストロフィを付ける必要があります。

> :k '[False]
'[False] :: [Bool]

空のリストでも同様:

> :k '[]
'[] :: [k]
于 2015-11-05T21:32:14.583 に答える