+++ /dev/null
-{-
-Copyright(C) 1999 Erik Meijer and Arjan van Yzendoorn
-
-Determines wether an express/declaration is "simple".
-The pretty-printing strategy is to print a "complex" expression
-on a new line.
--}
-
-module Utils where
-
-import Mondrian
-
-isSimpleExpr :: Expr -> Bool
-isSimpleExpr = \e ->
- case e of
- { Lit l -> True
- ; Var n -> True
- ; Case e as -> and [ isSimpleArms as, isSimpleExpr e ]
- ; Let ds e -> and [ isSimpleDecls ds, isSimpleExpr e ]
- ; Lambda n e -> isSimpleExpr e
- ; New n ds -> all isSimpleDecl ds
- ; App f a -> and [ isSimpleExpr f, isSimpleExpr a]
- ; Chain e oes -> and [ isSimpleExpr e, all isSimpleExpr [ e | (o,e) <- oes ] ]
- }
-
-isSimpleArms = \as ->
- and [ length as == 1, all isSimpleExpr [ e | (p,e) <- as ], all isSimplePattern [ p | (p,e) <- as ] ]
-
-isSimplePattern = \ p->
- case p of
- { Pattern n ds -> isSimpleDecls ds
- ; Default -> True
- }
-
-isSimpleDecls = \ds ->
- and [ all isSimpleDecl ds ]
-
-isSimpleDecl = \d ->
- case d of
- { ClassDecl n ns ds -> False
- ; ImportDecl n -> True
- ; VarDecl n e -> isSimpleExpr e
- ; SigDecl n e -> True
- }
-
-groupLambdas :: Expr -> Expr
-groupLambdas = \e ->
- case e of
- { Lambda ns (Lambda ms e) -> groupLambdas (Lambda (ns++ms) e)
- ; otherwise -> e
- }
-
-isTopLevel :: [Name] -> Name -> Bool
-isTopLevel = \topLevel -> \n ->
- n `elem` topLevel
-
-topLevel :: CompilationUnit -> [Name]
-topLevel = \p ->
- case p of
- { Package n ds -> [ n | VarDecl n e <- ds ]
- }