extensible-0.4.8: examples/state.hs
{-# LANGUAGE TypeOperators, DataKinds, TemplateHaskell, FlexibleContexts #-}
import Data.Extensible
import Control.Lens
import Control.Monad.State.Strict
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