packages feed

Shpadoinkle-examples-0.0.0.1: TODOMVC/Types.hs

{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE OverloadedStrings          #-}


module TODOMVC.Types where


import           Data.String
import           Data.Text


newtype Description = Description { unDescription :: Text } deriving (Show, Read, Eq, IsString)
newtype TaskId      = TaskId      { unTaskId      :: Int  } deriving (Show, Read, Eq, Ord, Num)


data Completed  = Complete | Incomplete
  deriving (Show, Read, Eq)


data Visibility = All | Active | Completed
  deriving (Show, Read, Eq, Ord, Enum, Bounded)


data Task = Task
  { description :: Description
  , completed   :: Completed
  , taskId      :: TaskId
  } deriving (Show, Read, Eq)


data Model = Model
  { tasks      :: [Task]
  , editing    :: Maybe TaskId
  , visibility :: Visibility
  , current    :: Description
  } deriving (Show, Read, Eq)


emptyModel :: Model
emptyModel = Model [] Nothing All (Description "")