purescript-0.15.15: src/Language/PureScript/CoreFn/Binders.hs
-- |
-- The core functional representation for binders
--
module Language.PureScript.CoreFn.Binders where
import Prelude
import Language.PureScript.AST.Literals (Literal)
import Language.PureScript.Names (Ident, ProperName, ProperNameType(..), Qualified)
-- |
-- Data type for binders
--
data Binder a
-- |
-- Wildcard binder
--
= NullBinder a
-- |
-- A binder which matches a literal value
--
| LiteralBinder a (Literal (Binder a))
-- |
-- A binder which binds an identifier
--
| VarBinder a Ident
-- |
-- A binder which matches a data constructor
--
| ConstructorBinder a (Qualified (ProperName 'TypeName)) (Qualified (ProperName 'ConstructorName)) [Binder a]
-- |
-- A binder which binds its input to an identifier
--
| NamedBinder a Ident (Binder a) deriving (Eq, Ord, Show, Functor)
extractBinderAnn :: Binder a -> a
extractBinderAnn (NullBinder a) = a
extractBinderAnn (LiteralBinder a _) = a
extractBinderAnn (VarBinder a _) = a
extractBinderAnn (ConstructorBinder a _ _ _) = a
extractBinderAnn (NamedBinder a _ _) = a