AFSM v0.1.3.0 Release Notes

Release Date: 2016-04-21 // about 8 years ago
    • remove GADTs extension, SM a b becomes SM s a b.
    • change type SMState s a b = (s -> a -> (SM s a b, b)) to newtype 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 to data SM s a b = SM (TF s a b) s.
    • SM s a b is no longer an instance of Arrow, but SM () a b is still an instance of Arrow. type SMH a b = SM () a b.
    • the SMFunctor class, and smfmap helps you to use SM 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.