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