Changelog for AFSM-0.1.3.1
0.1.3.1
- add SF data type. It is the type of stateful functions, and it is the same with SMH type without empty storage.
0.1.3.0
- 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 to SM 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, and hideStorage :: SM s a b -> SM () a b
can help you transform SM s a b
to SM () 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))
becomes data TF = TF (s -> a -> (SM a b, b))
. The reason about this changing is that type SMState
is just defining an alias of an existing type, So it is not possible to define a instance for SMState
. We observed that (s -> a -> (SM a b, b))
is similiar with ST monad
, and its behavior is also similiar with ST monad
. I think it is a good chance to do something around.
Although our original idea is removing Time
concept and adding Storage
concept, now it is much closer with Circuit
model or State
model than AFRP
. More precisely, it is a mixture of Circuit
and State
.
0.1.2.0
- switch
SM :: s -> (SMState s a b) -> SM a b
toSM :: (SMState s a b) -> s -> SM a b
. - the ArrowApp instance
- new functions: foldlSM, foldlDelaySM, delaySM, concatSM.
- working on Event, several undefined functions about Event.
- It's always hard to pick a name! 'Event', 'Evnt', 'Ev' or 'E'?