packages feed

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 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