3

Typeable1Haskell で日付構造のインスタンスを導出するのに問題があります。

これは私のコードです:

    {-# LANGUAGE StandaloneDeriving #-}
    {-# LANGUAGE DeriveDataTypeable #-}

    import Data.Typeable (Typeable,Typeable1)

    newtype FooM m a = Foo { unFoo :: (a -> Bar m) -> Bar m }
    newtype Bar m = Atom (m (Maybe (Bar m)))
    type Baz m = Waldo (FooM m ())
    type Waldo a = a

    data Qux m = Qux {
        baz :: Baz m
      , num :: Int
    } -- deriving Typeable1 [1]

    -- deriving instance Typeable1 Qux [2]

最初のコメント [1] のコメントを外すと、次のエラーが発生します。

    Cannot derive well-kinded instance of form `Typeable1 (Qux ...)'
          Class `Typeable1' expects an argument of kind `* -> *'
        In the data type declaration for `Qux'

[2] のコメントを外すと、次のエラーが発生します。

    Kind mis-match
    The first argument of `Typeable1' should have kind `* -> *',
    but `Qux' has kind `(* -> *) -> *'
    In the stand-alone deriving instance for `Typeable1 Qux'

Typeable私の質問は: の/Typeable1インスタンスを追加するにはどうすればよいQuxですか?

4

2 に答える 2

3

Quxのインスタンスを作成することはできませんTypeable1が、最新の GHC では、 のインスタンスを派生させることができるはずですTypeable。これは、そのような高カインド型を処理するのに十分なカインド ポリモーフィックでありTypeable1、そのようなものを不要にします。

質問が尋ねられたときに受け入れられた回答だったので、古い回答は保持されます: 残念ながら、あなたはできません:Typeable階層には種類のものの型クラスがありません(* -> *) -> *。これは、GHC がカインド ポリモーフィズムをサポートし始めているため、将来修正される可能性があります。

于 2012-07-15T01:22:27.423 に答える
0

この問題は現在、ghc チケット#5391で検討されているようです。deriving Typeableそのため、GHC 7.6 で問題がなくなる可能性があります。

于 2012-07-20T10:09:30.990 に答える