module Math.OEIS.Types where

import qualified Data.Text as T

type SeqData = [Integer]
type Texts = [T.Text]

data SearchStatus = ID          T.Text
                  | SubSeq      SeqData
                  | Signed      T.Text
                  | Name        T.Text
                  | Comment     T.Text
                  | Ref         T.Text
                  | Link        T.Text
                  | Formula     T.Text
                  | Example     T.Text
                  | Maple       T.Text
                  | Mathematica T.Text
                  | Offset      T.Text
                  | Program     T.Text
                  | XRef        T.Text
                  | KeyWord     T.Text
                  | Author      T.Text
                  | Extension   T.Text
                  | Others      T.Text
  deriving (Show, Eq)

--data Language = Haskell | PARI | L T.Text deriving (Show, Eq)
type Language = T.Text
type Program = (Language, [T.Text])

data Keyword = Base | Bref | Changed | Cofr | Cons | Core | Dead | Dumb |
               Dupe | Easy | Eigen   | Fini | Frac | Full | Hard | More |
               Mult | New  | Nice    | Nonn | Obsc | Sign | Tabf | Tabl |
               Uned | Unkn | Walk    | Word | Look | Other
  deriving (Eq, Show, Read)

data OEISData = INT Integer
              | SEQ SeqData
              | TXT T.Text
              | TXTS Texts
              | KEYS [Keyword]
              | PRGS [Program]
  deriving (Show)

data OEISSeq = OEIS { number      :: T.Text,
                      ids         :: Texts,
                      seqData     :: SeqData,
                      name        :: T.Text,
                      comment     :: Texts,
                      reference   :: Texts,
                      link        :: Texts,
                      formula     :: Texts,
                      example     :: Texts,
                      maple       :: Texts,
                      mathematica :: Texts,
                      program     :: [Program],
                      xref        :: Texts,
                      keyword     :: [Keyword],
                      offset      :: Integer,
                      author      :: T.Text,
                      ext         :: Texts,
                      references  :: Integer,
                      revision    :: Integer,
                      time        :: T.Text,
                      created     :: T.Text
                    }
  deriving (Show, Eq, Read)