DataKinds
を使用すると、ghciが多型戻り値の型をピン設定しようとすると面白いエラーが表示されます。私は次のコードを持っています:DataKindを使用しているときにGHCIでタイプシグネチャを指定できません
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE ExistentialQuantification #-}
{-# LANGUAGE StandaloneDeriving #-}
data DataKind
= KindA
| KindB
data SomeData (a :: DataKind) = forall c. SomeData
{ val :: Int
, sub :: Maybe (SomeData c)
}
deriving instance Show (SomeData a)
two :: SomeData 'KindA
two = SomeData 2 Nothing
このコードは期待通りにコンパイルされます。私はGHCiの中SomeData
を構築し、タイプを指定しない場合、それは正常に動作します:
> two
SomeData {val = 2, sub = Nothing}
> :t two
two :: SomeData 'KindA
> SomeData 2 Nothing
SomeData 2 Nothing :: SomeData a
をしかし、私は種類のそれの誤りを試してみて、指定した場合:
> SomeData 2 Nothing :: SomeData 'KindA
<interactive>:745:32-37: error:
• Data constructor ‘KindA’ cannot be used here
(Perhaps you intended to use DataKinds)
• In the first argument of ‘SomeData’, namely ‘KindA’
In an expression type signature: SomeData KindA
In the expression: SomeData 1 Nothing :: SomeData KindA
引用がされていないことが表示されますghciによって解釈される。私はstack ghci
を使ってreplを始めました。誰かがこれまでに遭遇したことはありますか?助けを前にありがとう。
私はそのGHCiのことを信じています。手動で拡張機能を有効にするには、 ':set -XDataKinds'を書いてみてください。何らかの理由で、ファイルを読み込んだときにインタプリタが自動的に読み込まない。 – baxbaxwalanuksiwe