{-# LANGUAGE OverloadedStrings, ScopedTypeVariables #-}
module Lib(translateText) where
import Network.Wreq
import Control.Lens ((&), (^.), (.~))
import Data.Text (Text, pack)
import GHC.Generics (Generic)
import Data.Aeson
import Model
data Language = DeEn | EnDe
instance FromJSON Phrase
instance FromJSON Translation
instance FromJSON RestResponse
translateText :: String -> IO()
translateText phrase = do
doRequest $ getLangOptions DeEn phrase
doRequest $ getLangOptions EnDe phrase
apiBase :: String
apiBase = "https://glosbe.com/gapi_v0_1/translate"
doRequest :: Options -> IO()
doRequest options = do
r <- getWith options apiBase
let body = r ^. responseBody
decoded = eitherDecode body :: Either String RestResponse
printPhrases $ fmap (take 5 . toPhrases) decoded
getLangOptions :: Language -> String -> Options
getLangOptions lang phrase =
let (from, dest) =
case lang of
DeEn -> ("deu", "eng")
EnDe -> ("eng", "deu")
in defaults
& param "phrase" .~ [pack phrase]
& param "from" .~ [from]
& param "dest" .~ [dest]
& param "format" .~ ["json"]
printPhrases :: Either String [String] -> IO()
printPhrases phrases =
case phrases of
Left _ -> print "No result"
Right phrases -> mapM_ putStrLn phrases