{-# LANGUAGE DeriveAnyClass #-}
module Hercules.API.Task where
import Data.Aeson
( FromJSON,
ToJSON,
)
import Data.Swagger (ToSchema)
import Data.Text (Text)
import GHC.Generics (Generic)
import Hercules.API.Id (Id)
import qualified Hercules.API.Id as Id
import Prelude hiding (id)
data Task a
= Task
{ typ :: Text,
id :: Id (Task a)
}
deriving (Generic, Show, Eq, ToJSON, FromJSON, ToSchema)
data Any
upcast :: Task a -> Task Any
upcast = uncheckedCast
upcastId :: Id (Task a) -> Id (Task Any)
upcastId = Id.uncheckedCast
uncheckedCast :: Task a -> Task b
uncheckedCast a = a {id = Id.uncheckedCast (id a)}