packages feed

fractaltext-0.1.0: src/Data/FractalText/Type.hs

{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TemplateHaskell #-}

module Data.FractalText.Type where

import qualified Data.Text as T
import qualified Data.Text.Short as ST
import qualified Data.Vector as V
import Generic.Data
import Lens.Micro.Platform

type Key = ST.ShortText

newtype ListElem a = ListElem
  { _listElem'value :: a
  }
  deriving (Generic, Eq, Functor, Show)

data DictElem a = DictElem
  { _dictElem'key :: Key
  , _dictElem'value :: a
  }
  deriving (Generic, Eq, Functor, Show)

data Item
  = Item'EmptyList
  | Item'List (V.Vector (ListElem T.Text))
  | Item'Dict (V.Vector (DictElem Item))
  deriving (Generic, Eq, Show)

data Line
  = Line'Blank
  | Line'Comment Int T.Text
  | Line'Key Int Key
  | Line'String Int T.Text
  deriving (Generic, Eq, Show)

data SurplusLine
  = SurplusLine'Blank
  | SurplusLine'Comment Int T.Text
  deriving (Generic, Eq, Show)

type Quoted = Bool

data ListElemA a = ListElemA
  { _listElemA'surplusLines :: V.Vector SurplusLine
  , _listElemA'quoted :: Bool
  , _listElemA'value :: a
  }
  deriving (Generic, Eq, Functor, Show)

data DictElemA a = DictElemA
  { _dictElemA'surplusLines :: V.Vector SurplusLine
  , _dictElemA'key :: Key
  , _dictElemA'value :: a
  }
  deriving (Generic, Eq, Functor, Show)

data ItemA
  = ItemA'EmptyList
  | ItemA'List Int (V.Vector (ListElemA T.Text))
  | ItemA'Dict Int (V.Vector (DictElemA ItemA))
  deriving (Generic, Eq, Show)

type Document = (ItemA, V.Vector SurplusLine)

$(makeLenses ''ListElem)
$(makeLenses ''DictElem)
$(makeLenses ''ListElemA)
$(makeLenses ''DictElemA)