module Berp.Base.StdTypes.None (none, noneIdentity, noneClass) where
import Berp.Base.Prims (primitive)
import Berp.Base.Monad (constantIO)
import Berp.Base.SemanticTypes (Procedure, Object (..))
import Berp.Base.StdTypes.Bool (true, false)
import Berp.Base.Identity (newIdentity, Identity)
import Berp.Base.Attributes (mkAttributes)
import Berp.Base.StdNames
import Berp.Base.StdTypes.Type (newType)
import Berp.Base.StdTypes.ObjectBase (objectBase)
import Berp.Base.StdTypes.String (string)
none :: Object
none = None
noneIdentity :: Identity
noneIdentity = constantIO newIdentity
noneClass :: Object
noneClass = constantIO $ do
dict <- attributes
newType [string "NoneType", objectBase, dict]
attributes :: IO Object
attributes = mkAttributes
[ (eqName, primitive 2 eq)
, (strName, primitive 1 str)
]
eq :: Procedure
eq [None, None] = return true
eq _ = Prelude.return false
str :: Procedure
str _ = Prelude.return $ string "None"