Hi all,
I was trying to do something very simple with GADTs when I ran into this problem -
-- My datatype
data T o where
TT ∷ T o1 → (o1 → o2) → T o2
-- Show instance for debugging
instance Show o ⇒ Show (T o) where
show (Only o) = "Only " ⊕ (show o)
show (TT t1 f) = "TT (" ⊕ (show t1) ⊕ ")"
When I try to compile this I get the following -
Could not deduce (Show o1) arising from a use of `show'
from the context (Show o)
While I understand why I get this error, I have no idea how to fix it! I cannot put a Show constraint on o1 because that variable is not exposed in the type of the expression.
I can work around this by changing my data type declaration to include Show constraints but I don't want to restrict my data type to only Showable things just so I could have a "Show" instance for debugging -
TT ∷ (Show o1, Show o2) ⇒ T o1 → (o1 → o2) → T o2
What else can I do to declare a Show instance for my datatype?
Thanks,
Anupam Jain