Я пробую пример 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.
Я не уверен, но вы можете попробовать '(s :: '[Symbol])' (дополнительная одинарная кавычка) и посмотреть, что произойдет. – chi
@chi просто попробовал. Ghc попросил меня включить 'TypeInType'. Затем он пожаловался на 2 ошибки. - Ожидаемый тип, но '' [Символ] 'имеет вид' [*] 'и - Ожидаемый вид' [Символ] ', но' s 'имеет вид' '[Символ]'. –