taskwarrior-0.3.0.0: Types and aeson instances for taskwarrior tasks

Safe HaskellNone
LanguageHaskell2010

Taskwarrior.Task

Description

This Module exports the main datatype of this library: Task. It is provided with FromJSON and ToJSON instances.

Synopsis

Documentation

data Task Source #

A Task represents a task from taskwarrior. The specification demands, that the existence of some fields is dependent on the status of the task. Those fields are therefore bundled in Status as a sum-type.

All fields in an imported task which are not part of the specification will be put in the UDA (user defined attributes) HashMap.

Since the json can have multiple semantically equivalent representations of a task first serializing and then deserializing is not identity. But deserializing and then serializing should be. (Thus making serializing and deserializing idempotent.)

Instances
Eq Task Source # 
Instance details

Defined in Taskwarrior.Task

Methods

(==) :: Task -> Task -> Bool #

(/=) :: Task -> Task -> Bool #

Read Task Source # 
Instance details

Defined in Taskwarrior.Task

Show Task Source # 
Instance details

Defined in Taskwarrior.Task

Methods

showsPrec :: Int -> Task -> ShowS #

show :: Task -> String #

showList :: [Task] -> ShowS #

ToJSON Task Source # 
Instance details

Defined in Taskwarrior.Task

FromJSON Task Source # 
Instance details

Defined in Taskwarrior.Task

type Tag = Text Source #

A Tag can be basically any string. But beware: Special symbols work but might clash with task cli syntax. As an example you can use a space in a Tag. But then you cannot use task +my tag on the command line.

makeTask :: UUID -> UTCTime -> Text -> Task Source #

Makes a Task with the given mandatory fields uuid, entry time and description. See createTask for a non-pure version which needs less parameters.

Adherence to specification

This library uses the taskwarrior specification for the JSON serialisation format. But it deviates in a small number of ways to be more pragmatic.

  • Task has the fields id and urgency although they are technically UDAs.
  • There are two invalid states which are not prevented via the Haskell type system by the chosen modeling:
  1. A Task with a Just value for recurringChild should not have the Status Recurring.
  2. The due field needs to be a Just value on a Task with Status Recurring.