eros-client-0.5.0.0: src/Text/Eros/Client.hs
module Text.Eros.Client where
import Data.Text.Lazy (Text)
import Text.Eros
-- |Okay, here's a function that actually does something. It takes an
-- 'ClientInput' type, and process it.
processClientInput :: ClientInput -> IO ClientOutput
processClientInput (ClientInput txt lists _) = do
outLists <- mapM listPair lists
return $ ClientOutput outLists
where
listPair :: ErosList -> IO (ErosList, Score)
listPair ls = do
pmap <- loadPhraseMap ls
let scr = messageScore txt pmap
return (ls, scr)
-- |We represent the input data in its own data type. This is needed
-- for JSON parsing, but it will also be useful down the road, when I
-- allow input that isn't JSON.
data ClientInput = ClientInput { text :: Text
, erosLists :: [ErosList]
, configuration :: ClientConf
}
-- |This is the output data type. I will make an instance of ToJSON
-- for this data type. Again, at the start, only JSON input and output
-- is existent.
data ClientOutput = ClientOutput { elScore :: [(ErosList, Score)]
}
-- |Configuration for the client
data ClientConf = ClientConf { pretty :: Bool
, quiet :: Bool
, outputFiles :: [FilePath]
}
-- |No configuration.
nullConf :: ClientConf
nullConf = ClientConf True False []
-- |It's convenient to think of Scores as Scores, although, they are
-- truly ints.
type Score = Int