2017-02-12 8 views
3

Я пробую пример installed application credentials в gogol package.haskell gogol - пример приложения Устанавливаемые приложения: Не удалось совместить вид «[Символ]» с «*»

Вот пример (только скопировано с установленной страницы мандатной приложений):

{-# LANGUAGE ScopedTypeVariables #-} 
import Data.Proxy  (Proxy (..)) 
import Data.Text  as T 
import Data.Text.IO as T 
import System.Exit (exitFailure) 
import System.Info (os) 
import System.Process (rawSystem) 
redirectPrompt :: AllowScopes (s :: [Symbol]) => OAuthClient -> proxy s -> IO (OAuthCode s) 
redirectPrompt c p = do 
    let url = formURL c p 
    T.putStrLn $ "Opening URL " `T.append` url 
    _ <- case os of 
     "darwin" -> rawSystem "open"  [unpack url] 
     "linux" -> rawSystem "xdg-open" [unpack url] 
    _  -> T.putStrLn "Unsupported OS" >> exitFailure 
    T.putStrLn "Please input the authorisation code: " 
    OAuthCode <$> T.getLine 

В то время как я составил код, я получил ошибки следующим образом:

Illegal kind signature: ‘s’ 
    Perhaps you intended to use KindSignatures 
In the type signature for ‘redirectPrompt’ 

Illegal kind: ‘[Symbol]’ Perhaps you intended to use DataKinds 

поэтому я добавил эти 2 строки в моем коде:

{-# LANGUAGE KindSignatures #-} 
{-# LANGUAGE DataKinds   #-} 

Затем, скомпилированный снова. Он показывает следующие сообщения об ошибках:

• Couldn't match kind ‘[Symbol]’ with ‘*’ 
    When matching the kind of ‘proxy’ 
• In the second argument of ‘formURL’, namely ‘p’ 
    In the expression: formURL c p 
    In an equation for ‘url’: url = formURL c p 
• Relevant bindings include 
    p :: proxy s (bound at app/Main.hs:36:18) 
    redirectPrompt :: OAuthClient -> proxy s -> IO (OAuthCode s) 
     (bound at app/Main.hs:36:1) 

Я понятия не имею, почему это становится не так .. типа p «s выглядит так же, как и formURL требуют один.

-- https://hackage.haskell.org/package/gogol-0.1.1/docs/Network-Google-Auth.html#v:formURL 
formURL :: AllowScopes (s :: [Symbol]) => OAuthClient -> proxy s -> Text 

Не понимаю ли я что-то?

Обновлено

Версия я использовал LTS-7.19. После изменения от lts-7.19 до lts-8.0 он работает.

Версия lts-7.19 ghc - 8.0.1. lts-8.0 one is 8.0.2. Вот некоторые примечания ghc-8.0.2-released.

+0

Я не уверен, но вы можете попробовать '(s :: '[Symbol])' (дополнительная одинарная кавычка) и посмотреть, что произойдет. – chi

+0

@chi просто попробовал. Ghc попросил меня включить 'TypeInType'. Затем он пожаловался на 2 ошибки. - Ожидаемый тип, но '' [Символ] 'имеет вид' [*] 'и - Ожидаемый вид' [Символ] ', но' s 'имеет вид' '[Символ]'. –

ответ

3

Работает с lts-8.0 и правые зависимости в .cabal

build-depends: base 
       , gogol 
       , gogol-core 
       , process 
       , text 

Вам нужно {-# LANGUAGE OverloadedStrings #-} и import GHC.TypeLits где Symbol определена.

{-# LANGUAGE ScopedTypeVariables #-} 
{-# LANGUAGE KindSignatures #-} 
{-# LANGUAGE OverloadedStrings #-} 
{-# LANGUAGE DataKinds   #-} 

module Main where 

import Network.Google.Auth 
import GHC.TypeLits 

import Data.Proxy  (Proxy (..)) 
import Data.Text  as T 
import Data.Text.IO as T 
import System.Exit (exitFailure) 
import System.Info (os) 
import System.Process (rawSystem) 

redirectPrompt :: AllowScopes (s :: [Symbol]) => OAuthClient -> proxy s -> IO (OAuthCode s) 
redirectPrompt c p = do 
let url = formURL c p 
T.putStrLn $ "Opening URL " `T.append` url 
    _ <- case os of 
     "darwin" -> rawSystem "open"  [unpack url] 
     "linux" -> rawSystem "xdg-open" [unpack url] 
     _  -> T.putStrLn "Unsupported OS" >> exitFailure 
T.putStrLn "Please input the authorisation code: " 
OAuthCode <$> T.getLine 

main = print "working" 
+2

Спасибо за предложения. На самом деле, у меня есть '{- # LANGUAGE OverloadedStrings # -}' и 'import GHC.TypeLits' в моем коде, а' .cabal' включает все предлагаемые вами пакеты. Но это не сработало. Кстати, я использую LTS haskell 7.19. –

+0

Ну, если это помогает знать, я побежал 'stack' с« простым »проектом, и он скомпилирован для меня. Надеюсь, поможет! btw с использованием 'resolver: lts-8.0'. –

+0

Он действительно работал после смены с lts-7.19 на lts-8.0. Похоже, некоторые ошибки ghc были исправлены на новой версии. –

 Смежные вопросы

  • Нет связанных вопросов^_^