@@ -22,8 +22,8 @@ module Language.PureScript.Sugar.CaseDeclarations (
2222import Data.List (groupBy)
2323import Data.Generics (mkT, everywhere)
2424
25−import Control.Applicative ((<$>))
26−import Control.Monad (forM, join, unless)
25+import Control.Applicative
26+import Control.Monad ((<=<), forM, join, unless)
2727import Control.Monad.Error.Class
2828
2929import Language.PureScript.Names
@@ -51,7 +51,13 @@ desugarAbs = everywhere (mkT replace)
5151-- Replace all top-level binders with case expressions.
5252--
5353desugarCases :: [Declaration] -> Either String [Declaration]
54−desugarCases = fmap join . mapM toDecls . groupBy inSameGroup
54+desugarCases = desugarRest <=< fmap join . mapM toDecls . groupBy inSameGroup
55+ where
56+ desugarRest :: [Declaration] -> Either String [Declaration]
57+ desugarRest ((TypeInstanceDeclaration constraints className tys ds) : rest) =
58+ (:) <$> (TypeInstanceDeclaration constraints className tys <$> desugarCases ds) <*> desugarRest rest
59+ desugarRest (d : ds) = (:) d <$> desugarRest ds
60+ desugarRest [] = pure []
5561
5662inSameGroup :: Declaration -> Declaration -> Bool
5763inSameGroup (ValueDeclaration ident1 _ _ _) (ValueDeclaration ident2 _ _ _) = ident1 == ident2