packages feed

ivory-examples-0.1.0.0: examples/Area.hs

{-# OPTIONS_GHC -fno-warn-orphans #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE QuasiQuotes #-}

module Area where

import Ivory.Language


[ivory|

struct val {
  field :: Stored Uint32
}

|]

val :: MemArea (Struct "val")
val  = area "val" (Just (istruct [field .= ival 0]))

cval :: ConstMemArea (Struct "val")
cval  = constArea "cval" (istruct [field .= ival 10])

getVal :: Def ('[] :-> Uint32)
getVal = proc "getVal" $ body $ do
  ret =<< deref (addrOf val ~> field)

setVal :: Def ('[Uint32] :-> ())
setVal = proc "setVal" $ \ n -> body $ do
  store (addrOf val ~> field) n
  retVoid

cmodule :: Module
cmodule = package "Area" $ do
  incl getVal
  incl setVal
  defMemArea val
  defConstMemArea cval
  defStruct (Proxy :: Proxy "val")