| |
let
fix = load "fix.lf" // import applicative-order fixed-point operator
IntClass =
let
IntClassBehavior =
(|
getIntField = (\():: State.fIntField ),
setIntField = (\Args:: self (| State, fIntField = Args.aIntField |) )
|)
deltaIntClass = IntClassBehavior
IntClassState = (| fIntField = 0 |)
deltaClass = (\State:: deltaIntClass)
IntClassG =
(\OArgs:: deltaClass
(| OArgs # (| IntClassState \ (| fIntField = OArgs.fIntField |) |) |))
IntClassW = (\OArgs:: (fix (| f=(\self:: IntClassG) |)) OArgs)
in
(| W=IntClassW, G=IntClassG |)
end)
in
IntClass
end
|