LINUX.ORG.RU

[Haskell]deriving typeable


0

0

Возникает проблема автоматического определения Typeable instance для данного кода.

data Void = Void deriving (Data,Typeable,Show,Eq)

data Expr x where
    DoNothing :: Expr Void
    BinOp :: Expr Word32 -> Expr Word32 -> Expr Word32

data BinaryOperation = Add
                       deriving (Typeable,Data)

deriving instance (Data a) => Data (Expr a)
deriving instance Typeable1 Expr

Текст ошибки:

    Couldn't match expected type `Void' against inferred type `Word32'
      Expected type: Expr a
      Inferred type: Expr Word32
    In the first argument of `z', namely `BinOp'
    In the first argument of `k', namely `z BinOp'
    When typechecking a standalone-derived method for `Data (Expr a)':
      gunfold k z c
                = case constrIndex c of {
                    GHC.Types.I# 1# -> z DoNothing
                    _ -> k (k (z BinOp)) }
Failed, modules loaded: none.

Кто-то может объяснить в чем дело. Или хотя бы отослать к соответствующему разделу документации.

Ответ на: комментарий от Shimuuar

Все обсуждения в интернете касаются только экзистенциальных типов, и с ними SYB похоже что не работает. Однако тут ведь не экзестенциальный! Похоже прийдется разбираться как оно работает.

recon88 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.