AFSM v0.1.3.0 Release Notes
Release Date: 2016-04-21 // about 6 years ago-
- remove GADTs extension,
SM a b
becomesSM s a b
. - change
type SMState s a b = (s -> a -> (SM s a b, b))
tonewtype TF s a b = TF (s -> a -> (SM s a b, b))
. The reason is that TF is a SM without initial storage, and it is the instance of several class type. - change
data SM s a b = SM (SMState s a b) s
todata SM s a b = SM (TF s a b) s
. SM s a b
is no longer an instance of Arrow, butSM () a b
is still an instance of Arrow.type SMH a b = SM () a b
.- the
SMFunctor
class, andsmfmap
helps you to useSM s a b
as a normal function. - more examples.
🚚 Now, the GADTs extension has been removed, and a lot of things should been cleared up. For now, I just keep them right there.
SM a b
has became toSM s a b
, so it is not an instance of the Arrow class anymore. Instead, we are able to keep the information about each machine's storage. Also, we provide the same Arrow functions, such as<<<<
,>>>>
,****
and&&&&
.type SMH a b = SM () a b
is still an Arrow instance, andhideStorage :: SM s a b -> SM () a b
can help you transformSM s a b
toSM () a b
, if you want to use the Arrow notation. The cost is that the information about storage is gone.type SMState s a b = (s -> a -> (SM a b, b))
becomesdata TF = TF (s -> a -> (SM a b, b))
. The reason about this changing is thattype SMState
is just defining an alias of an existing type, So it is not possible to define a instance forSMState
. We observed that(s -> a -> (SM a b, b))
is similiar withST monad
, and its behavior is also similiar withST monad
. I think it is a good chance to do something around.Although our original idea is removing
Time
concept and addingStorage
concept, now it is much closer withCircuit
model orState
model thanAFRP
. More precisely, it is a mixture ofCircuit
andState
. - remove GADTs extension,