-----------------------------------------------------------------------------
--
-- Module      :  Graphics.GPipe.Expr
-- Copyright   :  Tobias Bexelius
-- License     :  MIT
--
-- Maintainer  :  Tobias Bexelius
-- Stability   :  Experimental
-- Portability :  Portable
--
-- |
-- This module provides the DSL for shader operations in GPipe. The type @'S' x a@ is an opaque type that represents a value of type @a@ in a shader stage @x@, eg @S F Float@ means a
-- floating point value in a fragment stream.
--
-----------------------------------------------------------------------------

module Graphics.GPipe.Expr (
    -- * Atomic shader type
    S(),
    V, F,
    VFloat, VInt, VWord, VBool,
    FFloat, FInt, FWord, FBool,

    -- * Type classes where the Prelude ones are lacking
    Convert(..),
    Integral'(..),
    Real'(..),
    FloatingOrd(..),

    -- * Additional functions
    dFdx,
    dFdy,
    fwidth,

    -- * Shader control structures    
    while,
    ifThen,
    ifThenElse,
    ifThenElse',
    ShaderBase(),
    ShaderType(..)
)
where

import Data.Boolean
import Graphics.GPipe.Internal.Expr