berp-0.0.1: src/Berp/Base/Builtins/Utils.hs
-----------------------------------------------------------------------------
-- |
-- Module : Berp.Base.Builtins.Utils
-- Copyright : (c) 2010 Bernie Pope
-- License : BSD-style
-- Maintainer : florbitous@gmail.com
-- Stability : experimental
-- Portability : ghc
--
-- Support code for making builtins.
--
-----------------------------------------------------------------------------
module Berp.Base.Builtins.Utils (primFun, primConstant) where
import Data.IORef (newIORef)
import Berp.Base.Ident (Ident)
import Berp.Base.SemanticTypes (Arity, Procedure, ObjectRef, Object)
import Berp.Base.Prims (primitive)
import Berp.Base.Monad (constantIO)
primFun :: Ident -> Arity -> Procedure -> ObjectRef
primFun _ident arity proc = constantIO $ do
let primitiveObj = primitive arity proc
newIORef primitiveObj
primConstant :: Object -> ObjectRef
primConstant = constantIO . newIORef