haste-0.1: src/Haste/Types.hs
{-# LANGUAGE ExistentialQuantification #-}
module Haste.Types
( HM
, Args
, URLString
, Description
, Language (..)
, PasteProvider (..)
, SomePasteProvider (..)
, HasteOptions (..)
, HasteEnvironment (..)
, languageOptionName
) where
import Data.Char (toLower)
import Control.Monad.Reader
import qualified Data.Char as Char
type HM = ReaderT HasteEnvironment IO
type URLString = String
type Args = [String]
type Description = String
data Language
= Text
| Haskell
| Bash
| C
| Java
| Perl
| Python
deriving (Eq, Enum, Bounded, Show, Read)
class (Show a) => PasteProvider a where
paste :: a -> String -> HM URLString
optionName :: a -> String
optionName = map toLower . show
preferredLanguages :: a -> [Language]
preferredLanguages _ = []
data SomePasteProvider = forall a. PasteProvider a => SomePasteProvider a
instance Show SomePasteProvider where
show (SomePasteProvider p) = show p
instance PasteProvider SomePasteProvider where
paste (SomePasteProvider p) = paste p
optionName (SomePasteProvider p) = optionName p
preferredLanguages (SomePasteProvider p) = preferredLanguages p
data HasteOptions =
HasteOptions
{ optProvider :: Maybe SomePasteProvider
, optLanguage :: Maybe Language
, optHelp :: Bool
}
deriving (Show)
data HasteEnvironment =
HasteEnvironment
{ envContent :: String
, envLanguage :: Language
}
deriving (Show, Eq)
languageOptionName :: Language -> String
languageOptionName = map toLower . show