qfpl / reflex-workshop

20 stars 6 forks source link

EventWriterT remarks #4

Open endgame opened 6 years ago

endgame commented 6 years ago

In the section on EventWriterT, it talks about setting up a type ItemState. You can avoid writing the Semigroup and Monoid instances if you define it like:

{-# LANGUAGE GeneralizedNewtypeDeriving #-}
newtype ItemState = ItemState (Endo TodoItem, Any) deriving (Semigroup, Monoid)

(This makes it annoying to set up the lenses for the type, so maybe it's not worth it.)

Also, the docs recommend refactoring all the todo components into ... -> EventWriterT t ItemState m (), which works for everything except todoComplete (the checkbox), because you lose the information that it will only be an Event t (Bool -> Bool), which you do use within the component. This makes plumbing it through harder than it would otherwise be, because you have to runEventWriterT on the todoComplete, and then you only have an Endo TodoItem and you want an Endo Bool.

endgame commented 4 years ago

It might now be possible to get keep the nicer ItemState type and get the instances using deriving via.