Simon Peyton-Jones wrote: > | > arbitrarySeq :: Sequence a -> Gen RepSeqVal > | > arbitrarySeq Nil = > | > return (RepSeqVal Nil Empty) > | > arbitrarySeq (Cons (CTMandatory (NamedType n i t)) ts) = > | > do u <- arbitraryType t > | > us <- arbitrarySeq ts > | > case u of > | > RepTypeVal a v -> > | > case us of > | > RepSeqVal bs vs -> > | > return (RepSeqVal (Cons (CTMandatory (NamedType n i a)) bs) (v:*:vs)) > | > | > | > QuickTest.lhs:240:13: > | > GADT pattern match in non-rigid context for `Nil' > | > Solution: add a type signature > | > In the pattern: Nil > | > In the definition of `arbitrarySeq': > | > arbitrarySeq Nil = return (RepSeqVal Nil Empty) > > That looks odd to me. But it's hard to help without having the code. If you send it I'll try to help. > > | > Did you try giving a type signature to the (entire) case expression, > | > as I suggested? That should do it. > | > > | > | I'm not sure what this means or how to do it. Can you give an example or > | is it buried in some earlier email? I will go and have another look. > > I mean replace > (case blah of { ... }) > by > (case blah of { ... }) :: type-sig > > That is, attach a type signature to the case expression itself. Does that help at least explain what the sentence means? If so would you like to clarify the wiki advice? > > Thanks > > Simon > > Simon, I'm sorry to have put you to so much trouble by accidentally using an old version of ghc I must have had lying around. As penance, I will go and update the wiki with what I have learnt. Dominic.