Malformed Predicate w/ Template Haskell
The following two modules:
--- Cut ---
module ScratchTemplates where
import Language.Haskell.THSyntax
newtype Interaction a = Interaction a deriving Show
ret = Interaction
instance Monad Interaction where
return = Interaction
Interaction x >>= f = f x
instance Functor Interaction where
fmap f x = x >>= return . f
interactionT t = tcon (TconName "Interaction") `tapp` t
class Flatten a b | a -> b where
flatten :: a -> b
flattenT :: TypQ -> TypQ -> TypQ
flattenT t t' = tvar "Flatten" `tapp` t `tapp` t
baseType t = sequence [
inst (return []) (flattenT t t)
[val (pvar "flatten") (normal (var "id")) []],
inst (return []) (flattenT (interactionT t)
(interactionT t))
[val (pvar "flatten") (normal (var "id")) []]]
instance Flatten a b =>
Flatten (Interaction (Interaction a))
(Interaction b) where
flatten a = a >>= id >>= return . flatten
module Main where
import Monad
import ScratchTemplates
import Language.Haskell.THSyntax
$(baseType (tcon (Tuple 0)))
instance Flatten String String where
flatten a = a
instance Flatten (Interaction String) (Interaction
String) where
flatten a = a
instance Flatten b c => Combine String b (String, c) where
combine a b = liftM2 (,) a (fmap flatten b)
instance Flatten Int Int where
flatten a = a
class Combine a b c | a b -> c where
combine :: Interaction a -> Interaction b ->
Interaction c
instance Combine () b b where
combine a b = b
instance Flatten b c => Combine Int b (Int, c) where
combine a b = do
x <- a
y <- fmap flatten b
return (x, y)
instance (Flatten b c, Combine a c d) =>
Flatten (Interaction a, Interaction b)
(Interaction d) where
flatten (a, b) = combine a (fmap flatten b)
main = main
--- Cut here ---
loaded into ghci -fglasgow-exts produce the following
error message:
Compiling ScratchTemplates ( ScratchTemplates.hs,
interpreted )
Compiling Main ( scratch.hs, interpreted )
ghc-6.0.1: panic! (the `impossible' happened, GHC
version 6.0.1):
Malformed predicate
Please report it as a compiler bug to
glasgow-haskell-bugs@haskell.org,
or http://sourceforge.net/projects/ghc/.
Trac metadata
Trac field |
Value |
Version |
6.0.1 |
Type |
Bug |
TypeOfFailure |
OtherFailure |
Priority |
normal |
Resolution |
ResolvedFixed |
Component |
Compiler (Type checker) |
Test case |
|
Differential revisions |
|
BlockedBy |
|
Related |
|
Blocking |
|
CC |
|
Operating system |
|
Architecture |
|