structs-0.1.9: Strict GC'd imperative object-oriented programming with cheap pointers.
Copyright(C) 2015 Edward Kmett
LicenseBSD-style (see the file LICENSE)
MaintainerEdward Kmett <[email protected]>
Stabilityexperimental
Portabilitynon-portable
Safe HaskellUnsafe
LanguageHaskell2010

Data.Struct

Description

 
Synopsis

Documentation

class Struct (t :: Type -> Type) where Source #

An instance for Struct t is a witness to the machine-level equivalence of t and Object.

Minimal complete definition

Nothing

Methods

struct :: Dict (Coercible (t s) (Object s)) Source #

default struct :: Coercible (t s) (Object s) => Dict (Coercible (t s) (Object s)) Source #

Instances

Instances details
Struct Object Source # 
Instance details

Defined in Data.Struct.Internal

Methods

struct :: Dict (Coercible (Object s) (Object s)) Source #

Struct Label Source # 
Instance details

Defined in Data.Struct.Internal.Label

Methods

struct :: Dict (Coercible (Label s) (Object s)) Source #

Struct (LinkCut a) Source # 
Instance details

Defined in Data.Struct.Internal.LinkCut

Methods

struct :: Dict (Coercible (LinkCut a s) (Object s)) Source #

Struct (Order a) Source # 
Instance details

Defined in Data.Struct.Internal.Order

Methods

struct :: Dict (Coercible (Order a s) (Object s)) Source #

data Object s Source #

Instances

Instances details
Struct Object Source # 
Instance details

Defined in Data.Struct.Internal

Methods

struct :: Dict (Coercible (Object s) (Object s)) Source #

Eq (Object s) Source # 
Instance details

Defined in Data.Struct.Internal

Methods

(==) :: Object s -> Object s -> Bool #

(/=) :: Object s -> Object s -> Bool #

eqStruct :: Struct t => t s -> t s -> Bool Source #

alloc :: (PrimMonad m, Struct t) => Int -> m (t (PrimState m)) Source #

Allocate a structure made out of n slots. Initialize the structure before proceeding!

Nil

pattern Nil :: Struct t => t s Source #

Truly imperative.

isNil :: Struct t => t s -> Bool Source #

Predicate to check if a struct is Nil.

>>> isNil (Nil :: Object (PrimState IO))
True
>>> o <- alloc 1 :: IO (Object (PrimState IO))
>>> isNil o
False

Slots and Fields

data Slot (x :: k) (y :: k1) Source #

A Slot is a reference to another unboxed mutable object.

Instances

Instances details
Precomposable (Slot :: k1 -> k2 -> Type) Source # 
Instance details

Defined in Data.Struct.Internal

Methods

(#) :: forall (x :: k1) (y :: k1) (z :: k2). Slot x y -> Slot y z -> Slot x z Source #

slot Source #

Arguments

:: forall {k1} {k2} (s :: k1) (t :: k2). Int

slot

-> Slot s t 

The Slot at the given position in a Struct

get :: (PrimMonad m, Struct x, Struct y) => Slot x y -> x (PrimState m) -> m (y (PrimState m)) Source #

Get the value from a Slot

set :: (PrimMonad m, Struct x, Struct y) => Slot x y -> x (PrimState m) -> y (PrimState m) -> m () Source #

Set the value of a Slot

data Field (x :: k) a Source #

A Field is a reference from a struct to a normal Haskell data type.

Instances

Instances details
Precomposable (Field :: k -> Type -> Type) Source # 
Instance details

Defined in Data.Struct.Internal

Methods

(#) :: forall (x :: k) (y :: k) z. Slot x y -> Field y z -> Field x z Source #

field Source #

Arguments

:: forall {k} (s :: k) a. Int

slot

-> Field s a 

Store the reference to the Haskell data type in a normal field

unboxedField Source #

Arguments

:: forall {k} a (s :: k). Prim a 
=> Int

slot

-> Int

argument

-> Field s a 

Store the reference in the nth slot in the nth argument, treated as a MutableByteArray

getField :: (PrimMonad m, Struct x) => Field x a -> x (PrimState m) -> m a Source #

Get the value of a field in a struct

setField :: (PrimMonad m, Struct x) => Field x a -> x (PrimState m) -> a -> m () Source #

Set the value of a field in a struct

modifyField :: (Struct x, PrimMonad m) => Field x a -> x (PrimState m) -> (a -> a) -> m () Source #

modifyField' :: (Struct x, PrimMonad m) => Field x a -> x (PrimState m) -> (a -> a) -> m () Source #

class Precomposable (t :: k -> k1 -> Type) where Source #

We can compose slots to get a nested slot or field accessor

Methods

(#) :: forall (x :: k) (y :: k) (z :: k1). Slot x y -> t y z -> t x z Source #

Instances

Instances details
Precomposable (Field :: k -> Type -> Type) Source # 
Instance details

Defined in Data.Struct.Internal

Methods

(#) :: forall (x :: k) (y :: k) z. Slot x y -> Field y z -> Field x z Source #

Precomposable (Slot :: k1 -> k2 -> Type) Source # 
Instance details

Defined in Data.Struct.Internal

Methods

(#) :: forall (x :: k1) (y :: k1) (z :: k2). Slot x y -> Slot y z -> Slot x z Source #