{-# LANGUAGE TemplateHaskell #-}

module Data.MakeEnum.Options(
    OptionsT(..),
    Options,
    defaultOptions
  ) where

import Language.Haskell.TH

data OptionsT f = Options
  { forall (f :: * -> *). OptionsT f -> f String
newEnumName :: f String
  , forall (f :: * -> *). OptionsT f -> f String
fromFunctionName :: f String
  , forall (f :: * -> *). OptionsT f -> f String
toFunctionName :: f String
  , forall (f :: * -> *). OptionsT f -> String -> String
ctorNameModifier :: String -> String
  , forall (f :: * -> *). OptionsT f -> [Name]
deriveClasses :: [Name]
  }

type Options = OptionsT Maybe

defaultOptions :: Options
defaultOptions :: Options
defaultOptions = Maybe String
-> Maybe String
-> Maybe String
-> (String -> String)
-> [Name]
-> Options
forall (f :: * -> *).
f String
-> f String
-> f String
-> (String -> String)
-> [Name]
-> OptionsT f
Options Maybe String
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing String -> String
forall a. a -> a
id [''Eq, ''Ord, ''Show]