{-# 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 "")