-- | Disciple Core Salt.
--
--   This is what happens to 'C' when you leave it out in the sun for too long.
--
--   Salt is a fragment of System-F2 that contains just those features that 
--   can be easily mapped onto C or LLVM code. It has functions, case
--   expressions and primops, but no partial application, data types, or nested
--   functions. All operations on algebraic data need to have been expanded to
--   primitive store operations.
-- 
--   Salt exposes raw store and control primops, so its possible for functions
--   written directly in Salt to corrupt the heap (if they are wrong).
--
module DDC.Core.Salt
        ( -- * Language profile
          profile

          -- * Conversion
        , seaOfSaltModule
        , Error(..)

          -- * Names
        , Name          (..)
        , PrimTyCon     (..)
        , PrimOp        (..)

        , PrimCast      (..)
        , primCastPromoteIsValid
        , primCastTruncateIsValid

        , PrimCall      (..)

        , PrimControl   (..)

        , PrimStore     (..)

        , PrimArith     (..)

          -- * Name parsing
        , readName

          -- * Program lexing
        , lexModuleString
        , lexExpString)

where
import DDC.Core.Salt.Name
import DDC.Core.Salt.Profile
import DDC.Core.Salt.Convert