
Hello all, I have these Types type Time = Integer data Change a = Chg { ct :: Time, -- "change time" cv :: a -- "change value" } deriving (Eq,Show) data Temporal a = Temporal { td :: a, -- "temporal default" tc :: [Change a] -- "temporal changes" } deriving (Eq, Show) And I am trying to make Temporal a Monad by implementing join. My first Attempt was awfully verbose. It was also faulty, which was revealed by this QuickQueck (I am happy with my implementation of <*>) prop_tJoin tpr1 tpr2 = let f = (*) y1 = f <$> tpr1 <*> tpr2 y2 = (f <$> tpr1) `ap` tpr2 in y1 == y2 While I understand why my first implementatin was faulty, I fail to come up with anything remotely readable. I don't understand why I am having such difficulties, let alone solve them. I feel I am approaching this from the wrong angle. Any advice would be very much appreciated.