module Feldspar
( module Prelude.EDSL
, module Control.Monad
, Data
, Syntax
, Comp
, module Data.Int
, module Data.Word
, Complex (..)
, PrimType'
, PrimType
, Type
, Length
, Index
, Ref, DRef
, Arr, DArr
, IArr, DIArr
, Inhabited
, Syntactic
, Domain
, Internal
, eval
, showAST
, drawAST
, module Feldspar.Frontend
, Bits
, FiniteBits
, Integral
, Ord
, RealFloat
, RealFrac
, Border (..)
, IxRange
, AssertionLabel (..)
) where
import Prelude.EDSL
import Control.Monad hiding (foldM)
import Data.Bits (Bits, FiniteBits)
import Data.Complex (Complex (..))
import Data.Int
import Data.Word
import Language.Syntactic (Syntactic, Domain, Internal)
import qualified Language.Syntactic as Syntactic
import Language.Embedded.Imperative (Border (..), IxRange)
import Data.Inhabited
import Feldspar.Primitive.Representation
import Feldspar.Representation
import Feldspar.Frontend
import Feldspar.Optimize
showAST :: (Syntactic a, Domain a ~ FeldDomain) => a -> String
showAST = Syntactic.showAST . optimize onlyUserAssertions . Syntactic.desugar
drawAST :: (Syntactic a, Domain a ~ FeldDomain) => a -> IO ()
drawAST = Syntactic.drawAST . optimize onlyUserAssertions . Syntactic.desugar