On Tue, Jan 3, 2012 at 5:43 PM, AUGER Cédric <sedri...@gmail.com> wrote: > legSomeb :: LegGram nt t s -> nt -> Either String ([t], s) > -- but without it I have an error reported > legSomeb (LegGram g) ntV = > case M.lookup ntV g of > Nothing -> Left "No word accepted!" > Just l -> let sg = legSomeb (LegGram (M.delete ntV g)) > subsome :: [RRule nt t s] -> Either String ([t], s) > subsome [] = Left "No word accepted!" > subsome ((r,sem):l) = > let makeWord [] = Right ([],[]) > makeWord ((NT nnt):ll) = > do (m, ss) <- sg nnt > (mm, sss) <- makeWord ll > return (m++mm, ss:sss) > makeWord ((T tt):ll) = > do (mm, sss) <- makeWord ll > return (tt:mm, sss) > in > case makeWord r of > Right (ll, mm) -> Right (ll, sem mm) > Left err -> subsome l > in subsome l
I found it compiling well if removing this line: subsome :: [RRule nt t s] -> Either String ([t], s) It seems to me that the compiler is not sure the two 'nt' are equal. The ScopedTypeVariables can make the compiler believe they are equal. _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe