moduleData.Accessor.PrivatewhereimportqualifiedControl.CategoryasC{- |
The accessor function we use,
has a record value as first argument
and returns the content of a specific record field
and a function that allows to overwrite that field with a new value.
In former version of a package
we used a function that resembled the state monad.
However this required to use an 'undefined'
in the implementation of the @get@ function.
-}newtypeTra=Cons{decons::r->(a,a->r)}compose::Tab->Tbc->Taccomposefg=Cons$\aOld->let(bOld,aSetB)=deconsfaOld(cOld,bSetC)=deconsgbOldin(cOld,aSetB.bSetC)self::Trrself=Cons$\r->(r,id)instanceC.CategoryTwhereid=self(.)=flipcompose