Я пытаюсь реализовать основной slackbot с использованием пакета Network.Linklater:Зачем нужна монада Maybe?
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
это производит (во время компиляции):
Main.hs:20:28:
Couldn't match type ‘Maybe Command’ with ‘Command’
Expected type: Maybe Command -> IO Text
Actual type: Command -> IO Text
In the first argument of ‘slashSimple’, namely ‘kittensBot’
In the second argument of ‘run’, namely ‘(slashSimple kittensBot)’
Однако подпись slashSimple
составляет (Command -> IO Text) -> Application
. Должна ли подпись kittensBot
выполнить это? Почему не так?
Привет! Я автор пакета. Я сожалею о (когда-либо расширяющемся) разрыве между 4.0 на GitHub и 3.2 в Hackage. Я все еще пытаюсь объединить достаточно хороший API для нового веб-Socket API Slack, но, возможно, я просто продолжу и опубликую его в ближайшее время. – hao
Я загрузил новые документы для 4.0.0.0 здесь: http://hlian.github.io/linklater/hackage/ – hao