{-# LANGUAGE DataKinds #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE NoMonomorphismRestriction #-} module Ivory.Language ( -- * Kinds Area(..) , Proc(..) -- * Types , IvoryType(), IvoryArea() , IvoryVar() , IvoryExpr() , OpaqueType() -- ** Non-null References , IvoryRef() , ConstRef() , IvoryStore() , Ref(), refToPtr, constRef, deref, store, refCopy, refZero -- ** Stack Allocation , IvoryInit(..), Init() , IvoryZeroVal(izeroval) , IvoryZero(izero) , iarray , InitStruct(), (.=), istruct , local -- ** SizeOf , IvorySizeOf, sizeOf -- ** Nullable Pointers , Ptr(), nullPtr -- ** Booleans , IBool(), true, false -- ** Characters , IChar(), char -- ** Constant strings , IString() -- ** Dynamic bounded-length strings , IvoryString(..) -- ** Signed Integers , Sint8() , Sint16() , Sint32() , Sint64() -- ** Unsigned Integers , Uint8() , Uint16() , Uint32() , Uint64() -- ** Floating-point Numbers , IFloat() , IDouble() , isnan, isinf, roundF, ceilF, floorF, atan2F , ifloat, idouble -- * Effects , Effects(..) , BreakEff(..), GetBreaks(), AllowBreak(), ClearBreak(), noBreak , ReturnEff(..), GetReturn(), ClearReturn(), noReturn , AllocEff(..), GetAlloc(), ClearAlloc(), noAlloc , AllocEffects, ProcEffects, NoEffects -- * Language -- ** Monadic Interface , Ivory() , RefScope(..) -- ** Subexpression naming , assign -- ** Constants , extern, inclSym -- ** Arithmetic (operators from the 'Num' class are also provided). , IvoryIntegral((.%), iDiv), (./) -- ** Comparisons , IvoryEq((==?),(/=?)) , IvoryOrd((>?),(>=?),() -- BitDataField composition (like Control.Category.>>>) -- * bit actions , BitDataM(), runBits, withBits, withBitsRef , clear, setBit, clearBit, setField , bitToBool, boolToBit -- ** External memory areas , MemArea(), area, importArea , ConstMemArea(), constArea, importConstArea , IvoryAddrOf(addrOf) -- ** Procedures , Def() , ProcPtr(), procPtr , proc, voidProc, importProc , Body(), body, importFrom -- *** Pre/Post-Conditions , requires , checkStored , ensures , ensures_ -- ** Assumption/Assertion statements , assert , assume -- ** Structures , IvoryStruct(..), StructDef(), (~>), Label() , ASymbol -- ** Arrays , (!) , fromIx, toIx, Ix(), ixSize , arrayLen , toCArray , ANat , fromTypeNat -- ** Looping , for, times , breakOut , arrayMap , forever , upTo , downTo -- ** Call , call, indirect , call_, indirect_ -- ** Conditional Branching , ifte_, (?), withRef -- ** Return , ret, retVoid -- ** Type-safe casting. , SafeCast(), RuntimeCast(), Default() , safeCast, castWith, castDefault , SignCast(), signCast -- ** Module Definitions , AST.Module(), moduleName, package , ModuleDef, incl, depend, dependByName , defStruct , defStringType , defMemArea, defConstMemArea , private, public -- * Quasiquoters , ivory , ivoryFile , ivoryBlk -- * Utilities , Proxy(..), comment , module Ivory.Language.Coroutine ) where import Ivory.Language.Area import Ivory.Language.Array import Ivory.Language.Assert import Ivory.Language.Bits import Ivory.Language.CArray import Ivory.Language.Cast import Ivory.Language.Comment import Ivory.Language.Cond import Ivory.Language.Const import Ivory.Language.Coroutine import Ivory.Language.Effects import Ivory.Language.Float import Ivory.Language.IBool import Ivory.Language.IChar import Ivory.Language.IIntegral import Ivory.Language.IString import Ivory.Language.Init import Ivory.Language.Loop import Ivory.Language.MemArea import Ivory.Language.Module import Ivory.Language.Monad import Ivory.Language.Proc import Ivory.Language.Proxy import Ivory.Language.Ptr import Ivory.Language.Ref import Ivory.Language.Scope import Ivory.Language.Sint import Ivory.Language.SizeOf import Ivory.Language.String import Ivory.Language.Struct import Ivory.Language.Type import Ivory.Language.Uint import Ivory.Language.Syntax.Concrete.QQ import Ivory.Language.BitData.Array import Ivory.Language.BitData.BitData import Ivory.Language.BitData.Bits import Ivory.Language.BitData.Monad import qualified Ivory.Language.Syntax.AST as AST