{-# LANGUAGE CPP #-}
module Generators.GenTypedFlatCurry (genTypedFlatCurry) where
import Curry.FlatCurry.Annotated.Type
import Curry.FlatCurry.Annotated.Goodies
import Curry.FlatCurry.Typed.Type
genTypedFlatCurry :: AProg TypeExpr -> TProg
genTypedFlatCurry = trAProg
(\name imps types funcs ops ->
TProg name imps types (map genTypedFuncDecl funcs) ops)
genTypedFuncDecl :: AFuncDecl TypeExpr -> TFuncDecl
genTypedFuncDecl = trAFunc
(\name arity vis ty rule -> TFunc name arity vis ty $ genTypedRule rule)
genTypedRule :: ARule TypeExpr -> TRule
genTypedRule = trARule
(\_ args e -> TRule args $ genTypedExpr e)
TExternal
genTypedExpr :: AExpr TypeExpr -> TExpr
genTypedExpr = trAExpr
TVarE
TLit
(\ty ct (name, _) args -> TComb ty ct name args)
(const TLet)
(const TFree)
(const TOr)
(const TCase)
(TBranch . genTypedPattern)
(const TTyped)
genTypedPattern :: APattern TypeExpr -> TPattern
genTypedPattern = trAPattern
(\ty (name, _) args -> TPattern ty name args)
TLPattern