2016-07-12 14 views
2

私はNetwork.Linklaterパッケージを使用して、基本的なslackbotを実装しようとしています:多分モナドが強制されるのはなぜですか?

https://github.com/hlian/linklater

このパッケージには、次の関数を定義しています

slashSimple :: (Command -> IO Text) -> Application 
slashSimple f = 
    slash (\command _ respond -> f command >>= (respond . responseOf status200)) 

私はそうのように、これを消費しようとしています:

kittensBot :: Command -> IO Text 
kittensBot cmd = do 
      putStrLn("+ Incoming command: " ++ show cmd) 
      return "ok" 

main :: IO() 
main = do 
    putStrLn ("Listening on port: " ++ show port) 
    run port (slashSimple kittensBot) 
    where 
     port = 3001 

これは(コンパイル時に)

を生成します。

ただし、slashSimpleの署名は(Command -> IO Text) -> Applicationです。 kittensBotの署名はそれを満たすべきではありませんか?それはなぜですか?あなたが報告したようにGitHubのマスターでslashSimpleの定義ですが

+0

こんにちは!私はパッケージの作者です。 GitHubの4.0とHackageの3.2との間の(また広がっている)ギャップについては残念です。私はまだ、新しいWeb Socket API Slack用の十分なAPIを一緒に試してみようとしていますが、まもなくそれを公開してすぐに公開します。 – hao

+0

4.0.0.0用の新しいドキュメントをhttp://hlian.github.io/linklater/hackage/ – hao

答えて

7

linklater-3.2.0.0でHackageバージョンを使用すると、Hackage上のパッケージを使用する場合は、あなたのような何かにkittensBotを更新する必要があります

slashSimple :: (Maybe Command -> IO Text) -> Application 

です:

kittensBot :: Maybe Command -> IO Text 
kittensBot Nothing = ... 
kittensBot (Just cmd) = do 
     putStrLn("+ Incoming command: " ++ show cmd) 
     return "ok" 

また、GitHubからパッケージをダウンロードして手動でインストールすることもできます。

+0

にアップロードしました。簡潔な説明をいただきありがとうございます。特定のバージョンに含まれるコードを確認することは可能ですか? –

+0

上記のリンクは、バージョン3.2.0.0のコードを正確に示しています。 'linklater'のメインのHackageページに行くと、バージョンを変更することができ、そのバージョンのドキュメントに行き、署名を見ることができます。 Hackage上のすべてのバージョンは、「Maybe」という署名を持っています。 – crockeea

+0

しかし、署名ではなく機能の本体についてはどうですか? –

関連する問題