packages feed

hub-1.4.0: Hub/Prog.hs

--
-- >>> Hub.Prog <<<
--
-- This module records the other programs that hub is managing -- generally
-- the programs that come with a Haskell Plaform: the GHC tools, cabal and
-- a few others.
--
-- (c) 2011-2012 Chris Dornan


module Hub.Prog
    ( Prog(..)
    , ProgType(..)
    , P(..)
    , p2prog
    , progMap
    ) where

import qualified Data.Map       as Map


data Prog = PROG
    { enmPROG :: P
    , nmePROG :: String
    , typPROG :: ProgType
    }                                                           deriving (Show)

data ProgType = HcPT | TlPT
                                                                deriving (Show)
data P
    = GhcP
    | GhciP
    | Ghc_pkgP
    | Hp2psP
    | HpcP
    | Hsc2hsP
    | RunghcP
    | RunhaskellP
    | CabalP
    | AlexP
    | HappyP
    | HaddockP
    | GhcModP
    | GhcModiP
    | HLintP
    | HDevToolsP
    | HaskellDocsP
    | StylishHaskellP
                                            deriving (Eq,Ord,Bounded,Enum,Show)

p2prog :: P -> Prog
p2prog p =
    case p of
      GhcP               -> PROG p "ghc"              HcPT
      GhciP              -> PROG p "ghci"             HcPT
      Ghc_pkgP           -> PROG p "ghc-pkg"          HcPT
      HaddockP           -> PROG p "haddock"          HcPT
      Hp2psP             -> PROG p "hp2ps"            HcPT
      HpcP               -> PROG p "hpc"              HcPT
      Hsc2hsP            -> PROG p "hsc2hs"           HcPT
      RunghcP            -> PROG p "runghc"           HcPT
      RunhaskellP        -> PROG p "runhaskell"       HcPT
      CabalP             -> PROG p "cabal"            TlPT
      AlexP              -> PROG p "alex"             TlPT
      HappyP             -> PROG p "happy"            TlPT
      GhcModP            -> PROG p "ghc-mod"          TlPT
      GhcModiP           -> PROG p "ghc-modi"         TlPT
      HLintP             -> PROG p "hlint"            TlPT
      HDevToolsP         -> PROG p "hdevtools"        TlPT
      HaskellDocsP       -> PROG p "haskell-docs"     TlPT
      StylishHaskellP    -> PROG p "stylish-haskell"  TlPT

progMap :: Map.Map String Prog
progMap = Map.fromList [ (nmePROG pg,pg) | pg<-map p2prog [minBound..maxBound] ]