module Feldspar
( module Prelude.EDSL
, module Control.Monad
-- * Types
-- ** Syntax
, Data
, Syntax
, Comp
-- ** Object-language types
, module Data.Int
, module Data.Word
, Complex (..)
, PrimType'
, PrimType
, Type
, Length
, Index
, Ref, DRef
, Arr, DArr
, IArr, DIArr
, Inhabited
, Syntactic
, Domain
, Internal
-- * Front end
, 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
-- | Show the syntax tree using Unicode art
--
-- Only user assertions will be included.
showAST :: (Syntactic a, Domain a ~ FeldDomain) => a -> String
showAST = Syntactic.showAST . optimize onlyUserAssertions . Syntactic.desugar
-- | Draw the syntax tree on the terminal using Unicode art
--
-- Only user assertions will be included.
drawAST :: (Syntactic a, Domain a ~ FeldDomain) => a -> IO ()
drawAST = Syntactic.drawAST . optimize onlyUserAssertions . Syntactic.desugar