module CQRSExample.Instances ( ) where import Data.CQRS.Command (Eventable(..)) import CQRSExample.Aggregates import CQRSExample.Events instance Eventable Task Event where applyEvent mTask (TaskEvent taskEvent) = go taskEvent where go (TaskAdded title) = case mTask of Nothing -> Just $ newTask title Just _ -> error "Cannot add task which already exists" go TaskCompleted = fmap (\task -> task { taskStatus = TaskStatusComplete }) mTask go TaskReopened = fmap (\task -> task { taskStatus = TaskStatusOpen }) mTask go TaskArchived = fmap (\task -> task { taskStatus = TaskStatusArchived }) mTask