google-translate 0.1.1.2 → 0.2
raw patch · 3 files changed
+66/−56 lines, 3 filesdep +http-api-datadep +http-clientdep +transformersdep −eitherdep ~servantdep ~servant-clientPVP ok
version bump matches the API change (PVP)
Dependencies added: http-api-data, http-client, transformers
Dependencies removed: either
Dependency ranges changed: servant, servant-client
API changes (from Hackage documentation)
- Web.Google.Translate: confidence :: Detection -> Confidence
- Web.Google.Translate: detectedSourceLanguage :: Translation -> Maybe Lang
- Web.Google.Translate: detections :: DetectionResponse -> [[Detection]]
- Web.Google.Translate: instance Constructor C1_0Detection
- Web.Google.Translate: instance Constructor C1_0DetectionResponse
- Web.Google.Translate: instance Constructor C1_0Language
- Web.Google.Translate: instance Constructor C1_0LanguageResponse
- Web.Google.Translate: instance Constructor C1_0Translation
- Web.Google.Translate: instance Constructor C1_0TranslationResponse
- Web.Google.Translate: instance Datatype D1Detection
- Web.Google.Translate: instance Datatype D1DetectionResponse
- Web.Google.Translate: instance Datatype D1Language
- Web.Google.Translate: instance Datatype D1LanguageResponse
- Web.Google.Translate: instance Datatype D1Translation
- Web.Google.Translate: instance Datatype D1TranslationResponse
- Web.Google.Translate: instance Eq Body
- Web.Google.Translate: instance Eq Confidence
- Web.Google.Translate: instance Eq Detection
- Web.Google.Translate: instance Eq DetectionResponse
- Web.Google.Translate: instance Eq IsReliable
- Web.Google.Translate: instance Eq Key
- Web.Google.Translate: instance Eq Lang
- Web.Google.Translate: instance Eq Language
- Web.Google.Translate: instance Eq LanguageName
- Web.Google.Translate: instance Eq LanguageResponse
- Web.Google.Translate: instance Eq Source
- Web.Google.Translate: instance Eq Target
- Web.Google.Translate: instance Eq TranslatedText
- Web.Google.Translate: instance Eq Translation
- Web.Google.Translate: instance Eq TranslationResponse
- Web.Google.Translate: instance FromJSON Confidence
- Web.Google.Translate: instance FromJSON Detection
- Web.Google.Translate: instance FromJSON DetectionResponse
- Web.Google.Translate: instance FromJSON IsReliable
- Web.Google.Translate: instance FromJSON Lang
- Web.Google.Translate: instance FromJSON Language
- Web.Google.Translate: instance FromJSON LanguageName
- Web.Google.Translate: instance FromJSON LanguageResponse
- Web.Google.Translate: instance FromJSON TranslatedText
- Web.Google.Translate: instance FromJSON Translation
- Web.Google.Translate: instance FromJSON TranslationResponse
- Web.Google.Translate: instance FromText Body
- Web.Google.Translate: instance FromText Key
- Web.Google.Translate: instance FromText Lang
- Web.Google.Translate: instance FromText Source
- Web.Google.Translate: instance FromText Target
- Web.Google.Translate: instance FromText TranslatedText
- Web.Google.Translate: instance Generic Detection
- Web.Google.Translate: instance Generic DetectionResponse
- Web.Google.Translate: instance Generic Language
- Web.Google.Translate: instance Generic LanguageResponse
- Web.Google.Translate: instance Generic Translation
- Web.Google.Translate: instance Generic TranslationResponse
- Web.Google.Translate: instance Ord Body
- Web.Google.Translate: instance Ord Confidence
- Web.Google.Translate: instance Ord Detection
- Web.Google.Translate: instance Ord DetectionResponse
- Web.Google.Translate: instance Ord IsReliable
- Web.Google.Translate: instance Ord Key
- Web.Google.Translate: instance Ord Lang
- Web.Google.Translate: instance Ord Language
- Web.Google.Translate: instance Ord LanguageName
- Web.Google.Translate: instance Ord LanguageResponse
- Web.Google.Translate: instance Ord Source
- Web.Google.Translate: instance Ord Target
- Web.Google.Translate: instance Ord TranslatedText
- Web.Google.Translate: instance Ord Translation
- Web.Google.Translate: instance Ord TranslationResponse
- Web.Google.Translate: instance Selector S1_0_0Detection
- Web.Google.Translate: instance Selector S1_0_0DetectionResponse
- Web.Google.Translate: instance Selector S1_0_0Language
- Web.Google.Translate: instance Selector S1_0_0LanguageResponse
- Web.Google.Translate: instance Selector S1_0_0Translation
- Web.Google.Translate: instance Selector S1_0_0TranslationResponse
- Web.Google.Translate: instance Selector S1_0_1Detection
- Web.Google.Translate: instance Selector S1_0_1Language
- Web.Google.Translate: instance Selector S1_0_1Translation
- Web.Google.Translate: instance Selector S1_0_2Detection
- Web.Google.Translate: instance Show Body
- Web.Google.Translate: instance Show Confidence
- Web.Google.Translate: instance Show Detection
- Web.Google.Translate: instance Show DetectionResponse
- Web.Google.Translate: instance Show IsReliable
- Web.Google.Translate: instance Show Key
- Web.Google.Translate: instance Show Lang
- Web.Google.Translate: instance Show Language
- Web.Google.Translate: instance Show LanguageName
- Web.Google.Translate: instance Show LanguageResponse
- Web.Google.Translate: instance Show Source
- Web.Google.Translate: instance Show Target
- Web.Google.Translate: instance Show TranslatedText
- Web.Google.Translate: instance Show Translation
- Web.Google.Translate: instance Show TranslationResponse
- Web.Google.Translate: instance ToJSON Lang
- Web.Google.Translate: instance ToText Body
- Web.Google.Translate: instance ToText Key
- Web.Google.Translate: instance ToText Lang
- Web.Google.Translate: instance ToText Source
- Web.Google.Translate: instance ToText Target
- Web.Google.Translate: instance ToText TranslatedText
- Web.Google.Translate: isReliable :: Detection -> IsReliable
- Web.Google.Translate: lang :: Language -> Lang
- Web.Google.Translate: language :: Detection -> Lang
- Web.Google.Translate: languages :: LanguageResponse -> [Language]
- Web.Google.Translate: name :: Language -> Maybe LanguageName
- Web.Google.Translate: translatedText :: Translation -> TranslatedText
- Web.Google.Translate: translations :: TranslationResponse -> [Translation]
+ Web.Google.Translate: [confidence] :: Detection -> Confidence
+ Web.Google.Translate: [detectedSourceLanguage] :: Translation -> Maybe Lang
+ Web.Google.Translate: [detections] :: DetectionResponse -> [[Detection]]
+ Web.Google.Translate: [isReliable] :: Detection -> IsReliable
+ Web.Google.Translate: [lang] :: Language -> Lang
+ Web.Google.Translate: [language] :: Detection -> Lang
+ Web.Google.Translate: [languages] :: LanguageResponse -> [Language]
+ Web.Google.Translate: [name] :: Language -> Maybe LanguageName
+ Web.Google.Translate: [translatedText] :: Translation -> TranslatedText
+ Web.Google.Translate: [translations] :: TranslationResponse -> [Translation]
+ Web.Google.Translate: instance Data.Aeson.Types.Class.FromJSON Web.Google.Translate.Confidence
+ Web.Google.Translate: instance Data.Aeson.Types.Class.FromJSON Web.Google.Translate.Detection
+ Web.Google.Translate: instance Data.Aeson.Types.Class.FromJSON Web.Google.Translate.DetectionResponse
+ Web.Google.Translate: instance Data.Aeson.Types.Class.FromJSON Web.Google.Translate.IsReliable
+ Web.Google.Translate: instance Data.Aeson.Types.Class.FromJSON Web.Google.Translate.Lang
+ Web.Google.Translate: instance Data.Aeson.Types.Class.FromJSON Web.Google.Translate.Language
+ Web.Google.Translate: instance Data.Aeson.Types.Class.FromJSON Web.Google.Translate.LanguageName
+ Web.Google.Translate: instance Data.Aeson.Types.Class.FromJSON Web.Google.Translate.LanguageResponse
+ Web.Google.Translate: instance Data.Aeson.Types.Class.FromJSON Web.Google.Translate.TranslatedText
+ Web.Google.Translate: instance Data.Aeson.Types.Class.FromJSON Web.Google.Translate.Translation
+ Web.Google.Translate: instance Data.Aeson.Types.Class.FromJSON Web.Google.Translate.TranslationResponse
+ Web.Google.Translate: instance Data.Aeson.Types.Class.ToJSON Web.Google.Translate.Lang
+ Web.Google.Translate: instance GHC.Classes.Eq Web.Google.Translate.Body
+ Web.Google.Translate: instance GHC.Classes.Eq Web.Google.Translate.Confidence
+ Web.Google.Translate: instance GHC.Classes.Eq Web.Google.Translate.Detection
+ Web.Google.Translate: instance GHC.Classes.Eq Web.Google.Translate.DetectionResponse
+ Web.Google.Translate: instance GHC.Classes.Eq Web.Google.Translate.IsReliable
+ Web.Google.Translate: instance GHC.Classes.Eq Web.Google.Translate.Key
+ Web.Google.Translate: instance GHC.Classes.Eq Web.Google.Translate.Lang
+ Web.Google.Translate: instance GHC.Classes.Eq Web.Google.Translate.Language
+ Web.Google.Translate: instance GHC.Classes.Eq Web.Google.Translate.LanguageName
+ Web.Google.Translate: instance GHC.Classes.Eq Web.Google.Translate.LanguageResponse
+ Web.Google.Translate: instance GHC.Classes.Eq Web.Google.Translate.Source
+ Web.Google.Translate: instance GHC.Classes.Eq Web.Google.Translate.Target
+ Web.Google.Translate: instance GHC.Classes.Eq Web.Google.Translate.TranslatedText
+ Web.Google.Translate: instance GHC.Classes.Eq Web.Google.Translate.Translation
+ Web.Google.Translate: instance GHC.Classes.Eq Web.Google.Translate.TranslationResponse
+ Web.Google.Translate: instance GHC.Classes.Ord Web.Google.Translate.Body
+ Web.Google.Translate: instance GHC.Classes.Ord Web.Google.Translate.Confidence
+ Web.Google.Translate: instance GHC.Classes.Ord Web.Google.Translate.Detection
+ Web.Google.Translate: instance GHC.Classes.Ord Web.Google.Translate.DetectionResponse
+ Web.Google.Translate: instance GHC.Classes.Ord Web.Google.Translate.IsReliable
+ Web.Google.Translate: instance GHC.Classes.Ord Web.Google.Translate.Key
+ Web.Google.Translate: instance GHC.Classes.Ord Web.Google.Translate.Lang
+ Web.Google.Translate: instance GHC.Classes.Ord Web.Google.Translate.Language
+ Web.Google.Translate: instance GHC.Classes.Ord Web.Google.Translate.LanguageName
+ Web.Google.Translate: instance GHC.Classes.Ord Web.Google.Translate.LanguageResponse
+ Web.Google.Translate: instance GHC.Classes.Ord Web.Google.Translate.Source
+ Web.Google.Translate: instance GHC.Classes.Ord Web.Google.Translate.Target
+ Web.Google.Translate: instance GHC.Classes.Ord Web.Google.Translate.TranslatedText
+ Web.Google.Translate: instance GHC.Classes.Ord Web.Google.Translate.Translation
+ Web.Google.Translate: instance GHC.Classes.Ord Web.Google.Translate.TranslationResponse
+ Web.Google.Translate: instance GHC.Generics.Generic Web.Google.Translate.Detection
+ Web.Google.Translate: instance GHC.Generics.Generic Web.Google.Translate.DetectionResponse
+ Web.Google.Translate: instance GHC.Generics.Generic Web.Google.Translate.Language
+ Web.Google.Translate: instance GHC.Generics.Generic Web.Google.Translate.LanguageResponse
+ Web.Google.Translate: instance GHC.Generics.Generic Web.Google.Translate.Translation
+ Web.Google.Translate: instance GHC.Generics.Generic Web.Google.Translate.TranslationResponse
+ Web.Google.Translate: instance GHC.Show.Show Web.Google.Translate.Body
+ Web.Google.Translate: instance GHC.Show.Show Web.Google.Translate.Confidence
+ Web.Google.Translate: instance GHC.Show.Show Web.Google.Translate.Detection
+ Web.Google.Translate: instance GHC.Show.Show Web.Google.Translate.DetectionResponse
+ Web.Google.Translate: instance GHC.Show.Show Web.Google.Translate.IsReliable
+ Web.Google.Translate: instance GHC.Show.Show Web.Google.Translate.Key
+ Web.Google.Translate: instance GHC.Show.Show Web.Google.Translate.Lang
+ Web.Google.Translate: instance GHC.Show.Show Web.Google.Translate.Language
+ Web.Google.Translate: instance GHC.Show.Show Web.Google.Translate.LanguageName
+ Web.Google.Translate: instance GHC.Show.Show Web.Google.Translate.LanguageResponse
+ Web.Google.Translate: instance GHC.Show.Show Web.Google.Translate.Source
+ Web.Google.Translate: instance GHC.Show.Show Web.Google.Translate.Target
+ Web.Google.Translate: instance GHC.Show.Show Web.Google.Translate.TranslatedText
+ Web.Google.Translate: instance GHC.Show.Show Web.Google.Translate.Translation
+ Web.Google.Translate: instance GHC.Show.Show Web.Google.Translate.TranslationResponse
+ Web.Google.Translate: instance Web.HttpApiData.Internal.FromHttpApiData Web.Google.Translate.Body
+ Web.Google.Translate: instance Web.HttpApiData.Internal.FromHttpApiData Web.Google.Translate.Key
+ Web.Google.Translate: instance Web.HttpApiData.Internal.FromHttpApiData Web.Google.Translate.TranslatedText
+ Web.Google.Translate: instance Web.HttpApiData.Internal.ToHttpApiData Web.Google.Translate.Body
+ Web.Google.Translate: instance Web.HttpApiData.Internal.ToHttpApiData Web.Google.Translate.Key
+ Web.Google.Translate: instance Web.HttpApiData.Internal.ToHttpApiData Web.Google.Translate.Lang
+ Web.Google.Translate: instance Web.HttpApiData.Internal.ToHttpApiData Web.Google.Translate.Source
+ Web.Google.Translate: instance Web.HttpApiData.Internal.ToHttpApiData Web.Google.Translate.Target
+ Web.Google.Translate: instance Web.HttpApiData.Internal.ToHttpApiData Web.Google.Translate.TranslatedText
- Web.Google.Translate: detect :: Key -> Body -> IO (Either ServantError DetectionResponse)
+ Web.Google.Translate: detect :: Manager -> Key -> Body -> IO (Either ServantError DetectionResponse)
- Web.Google.Translate: getLanguages :: Key -> Maybe Target -> IO (Either ServantError LanguageResponse)
+ Web.Google.Translate: getLanguages :: Manager -> Key -> Maybe Target -> IO (Either ServantError LanguageResponse)
- Web.Google.Translate: translate :: Key -> Maybe Source -> Target -> Body -> IO (Either ServantError TranslationResponse)
+ Web.Google.Translate: translate :: Manager -> Key -> Maybe Source -> Target -> Body -> IO (Either ServantError TranslationResponse)
Files
- README.md +10/−7
- google-translate.cabal +7/−5
- src/Web/Google/Translate.hs +49/−44
README.md view
@@ -8,20 +8,23 @@ High-level, up-to-date bindings to the Google Translate API. ```haskell+{-# LANGUAGE OverloadedStrings #-} import Control.Monad import qualified Data.Text.IO as T-import Data.Maybe-import Web.Google.Translate - +import Network.HTTP.Client+import Network.HTTP.Client.TLS+import Web.Google.Translate+ main :: IO () main = do Right TranslationResponse { translations = xs } <-- translate (Key "<API-Key>") (Just srcLang) trgLang (Body "Hello")+ newManager tlsManagerSettings >>= \mgr ->+ translate mgr (Key "<API-Key>") (Just srcLang) trgLang (Body "Hello") forM_ xs $ \Translation { translatedText = TranslatedText txt } -> T.putStrLn txt where srcLang = Source English trgLang = Target Russian- --- >>> Здравствуйте -``` ++-- >>> Здравствуйте+```
google-translate.cabal view
@@ -1,9 +1,9 @@ name: google-translate-version: 0.1.1.2+version: 0.2 synopsis: Google Translate API bindings license: BSD3 license-file: LICENSE-author: David Johnson+author: David Johnson, Dmitry Dzhus maintainer: djohnson.m@gmail.com copyright: David Johnson (c) 2016 category: Web@@ -20,9 +20,11 @@ build-depends: aeson , base >= 4.7 && < 5 , bytestring == 0.10.*- , either == 4.4.*- , servant == 0.4.*- , servant-client == 0.4.*+ , transformers >= 0.4 && < 0.6+ , http-api-data == 0.2.*+ , http-client == 0.4.*+ , servant == 0.7.*+ , servant-client == 0.7.* , text == 1.2.* default-language: Haskell2010
src/Web/Google/Translate.hs view
@@ -1,7 +1,5 @@-{-# LANGUAGE PolyKinds #-}-{-# LANGUAGE StandaloneDeriving #-}+{-# LANGUAGE PolyKinds #-} {-# LANGUAGE GADTs #-}-{-# LANGUAGE KindSignatures #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-}@@ -10,7 +8,7 @@ ------------------------------------------------------------------------------ -- | -- Module : Web.Google.Translate--- Copyright : (c) David Johnson 2015+-- Copyright : (c) David Johnson 2016 -- Maintainer : djohnson.m@gmail.com -- Stability : experimental -- Portability : POSIX@@ -42,38 +40,35 @@ , Language (..) ) where -------------------------------------------------------------------------------import Control.Applicative-import Control.Monad.Trans.Either+import Control.Monad.Trans.Except import Data.Aeson-import Data.Aeson.Types-import Data.Maybe import Data.Proxy import Data.Text (Text) import qualified Data.Text as T import GHC.Generics-import GHC.TypeLits+import Network.HTTP.Client (Manager) import Servant.API import Servant.Client ------------------------------------------------------------------------------ -- | API Key newtype Key = Key Text- deriving (ToText, FromText, Show, Eq, Ord)+ deriving (ToHttpApiData, FromHttpApiData, Show, Eq, Ord) ------------------------------------------------------------------------------ -- | Source Language newtype Source = Source Lang- deriving (ToText, FromText, Show, Eq, Ord)+ deriving (ToHttpApiData, Show, Eq, Ord) ------------------------------------------------------------------------------ -- | Target Language newtype Target = Target Lang- deriving (ToText, FromText, Show, Eq, Ord)+ deriving (ToHttpApiData, Show, Eq, Ord) ------------------------------------------------------------------------------ -- | Text for translation newtype Body = Body Text- deriving (ToText, FromText, Show, Eq, Ord)+ deriving (ToHttpApiData, FromHttpApiData, Show, Eq, Ord) ------------------------------------------------------------------------------ -- | Translated Text newtype TranslatedText = TranslatedText Text- deriving (ToText, FromText, Show, Eq, Ord, FromJSON)+ deriving (ToHttpApiData, FromHttpApiData, Show, Eq, Ord, FromJSON) ------------------------------------------------------------------------------ -- | Translation Reponse data TranslationResponse = TranslationResponse {@@ -81,11 +76,11 @@ } deriving (Show, Eq, Ord, Generic) ------------------------------------------------------------------------------ instance FromJSON TranslationResponse where- parseJSON (Object o) = do+ parseJSON = withObject "translations" $ \o -> do d <- o .: "data" TranslationResponse <$> d .: "translations" --------------------------------------------------------------------------------- | Translation +-- | Translation data Translation = Translation { translatedText :: TranslatedText , detectedSourceLanguage :: Maybe Lang@@ -99,7 +94,7 @@ } deriving (Show, Eq, Ord, Generic) ------------------------------------------------------------------------------ instance FromJSON DetectionResponse where- parseJSON (Object o) = do+ parseJSON = withObject "detetctions" $ \o -> do d <- o .: "data" DetectionResponse <$> d .: "detections" ------------------------------------------------------------------------------@@ -124,18 +119,19 @@ } deriving (Show, Eq, Ord, Generic) ------------------------------------------------------------------------------ instance FromJSON LanguageResponse where- parseJSON (Object o) = do+ parseJSON = withObject "languages" $ \o -> do d <- o .: "data" LanguageResponse <$> d .: "languages" --------------------------------------------------------------------------------- | Language +-- | Language data Language = Language { lang :: Lang , name :: Maybe LanguageName } deriving (Show, Eq, Generic, Ord) ------------------------------------------------------------------------------ instance FromJSON Language where- parseJSON (Object o) = Language <$> o .: "language" <*> o .:? "name"+ parseJSON = withObject "language" $ \o ->+ Language <$> o .: "language" <*> o .:? "name" ------------------------------------------------------------------------------ -- | Language Name newtype LanguageName = LanguageName Text deriving (Show, Eq, Ord, FromJSON)@@ -172,41 +168,55 @@ -> Maybe Source -> Maybe Target -> Maybe Body- -> EitherT ServantError IO TranslationResponse+ -> Manager+ -> BaseUrl+ -> ExceptT ServantError IO TranslationResponse detect' :: Maybe Key -> Maybe Body- -> EitherT ServantError IO DetectionResponse-translate' :<|> detect' :<|> getLanguages' = client api (BaseUrl Https "www.googleapis.com" 443)+ -> Manager+ -> BaseUrl+ -> ExceptT ServantError IO DetectionResponse+getLanguages'+ :: Maybe Key+ -> Maybe Target+ -> Manager+ -> BaseUrl+ -> ExceptT ServantError IO LanguageResponse+translate' :<|> detect' :<|> getLanguages' = client api ------------------------------------------------------------------------------+googleApis :: BaseUrl+googleApis = BaseUrl Https "www.googleapis.com" 443 "/"+------------------------------------------------------------------------------ -- | Detect target language detect- :: Key+ :: Manager+ -> Key -> Body -> IO (Either ServantError DetectionResponse)-detect key body = runEitherT $ detect' (Just key) (Just body)+detect mgr key body = runExceptT $ detect' (Just key) (Just body) mgr googleApis ------------------------------------------------------------------------------ -- | Perform translation from `Source` language to `Target` langauge. -- If `Source` not specified, attempt detection of `Lang` translate- :: Key+ :: Manager+ -> Key -> Maybe Source -> Target -> Body -> IO (Either ServantError TranslationResponse)-translate key src trgt body =- runEitherT $ translate' (Just key) src (Just trgt) (Just body)+translate mgr key src trgt body =+ runExceptT $ translate' (Just key) src (Just trgt) (Just body) mgr googleApis ------------------------------------------------------------------------------ -- | Retrieve all languages -- If `Target` specified, return langauge name in `Target` langauge.-getLanguages - :: Key+getLanguages+ :: Manager+ -> Key -> Maybe Target -> IO (Either ServantError LanguageResponse)-getLanguages key trgt = runEitherT $ getLanguages' (Just key) trgt--------------------------------------------------------------------------------toTxt :: Show a => a -> Text-toTxt = T.pack . show +getLanguages mgr key trgt =+ runExceptT $ getLanguages' (Just key) trgt mgr googleApis ------------------------------------------------------------------------------ instance Show Lang where show Afrikaans = "af"@@ -396,13 +406,8 @@ | Zulu deriving (Eq, Ord) -------------------------------------------------------------------------------instance ToText Lang where toText = toTxt--------------------------------------------------------------------------------instance FromText Lang where- fromText txt =- case fromJSON (String txt) of- Success x -> Just x- _ -> Nothing+instance ToHttpApiData Lang where+ toUrlPiece = T.pack . show ------------------------------------------------------------------------------ instance FromJSON Lang where parseJSON (String "af") = pure Afrikaans@@ -496,8 +501,8 @@ parseJSON (String "yi") = pure Yiddish parseJSON (String "yo") = pure Yoruba parseJSON (String "zu") = pure Zulu+ parseJSON (String _) = fail "Unknown language code"+ parseJSON _ = fail "Expecting language code as a JSON string" ------------------------------------------------------------------------------ instance ToJSON Lang where- toJSON = String . toTxt--+ toJSON = String . toUrlPiece