reflex-workshop icon indicating copy to clipboard operation
reflex-workshop copied to clipboard

EventWriterT remarks

Open endgame opened this issue 7 years ago • 1 comments

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 avatar Aug 30 '18 00:08 endgame

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

endgame avatar Jan 07 '20 02:01 endgame