packages feed

extensible-0.3.5: examples/state.hs

{-# LANGUAGE TypeOperators, DataKinds, TemplateHaskell, FlexibleContexts #-}
import Data.Extensible
import Control.Lens
import Control.Monad.State

mkField "foo bar baz"

statefulStuff :: State (Record '["foo" :> Int, "bar" :> Int, "baz" :> Float]) ()
statefulStuff = do
    v <- use foo
    bar += v
    baz .= 42

main = print $ execState statefulStuff
  $ foo @= 10 <: bar @= 0 <: baz @= 0 <: Nil