0

このトピックによると:https ://stackoverflow.com/questions/14494922/examples-of-websocket-usage-in-haskell最初の質問があります。WebSocketライブラリの公式の例が私のマシンで実行されないのはなぜですか?

import Data.Char (isPunctuation, isSpace)
import Data.Monoid (mappend)
import Data.Text (Text)
import Control.Exception (fromException)
import Control.Monad (forM_, forever)
import Control.Concurrent (MVar, newMVar, modifyMVar_, readMVar)
import Control.Monad.IO.Class (liftIO)
import qualified Data.Text as T
import qualified Data.Text.IO as T
import Network.WebSockets

meow :: TextProtocol p => WebSockets p ()
meow = forever $ do
    msg <- receiveData
    sendTextData $ msg `T.append` ", meow."

main :: IO ()
main = runServer "0.0.0.0" 8000 meow

私は得る:

ciembor@freedom ~> ghc hchat.hs; and ./hchat
[1 of 1] Compiling Main             ( hchat.hs, hchat.o )

hchat.hs:15:35:
    Couldn't match expected type `Text' with actual type `[Char]'
    In the second argument of `T.append', namely `", meow."'
    In the second argument of `($)', namely `msg `T.append` ", meow."'
    In a stmt of a 'do' block: sendTextData $ msg `T.append` ", meow."

hchat.hs:18:33:
    Couldn't match expected type `Request -> WebSockets p0 ()'
                with actual type `WebSockets p1 ()'
    In the third argument of `runServer', namely `meow'
    In the expression: runServer "0.0.0.0" 8000 meow
    In an equation for `main': main = runServer "0.0.0.0" 8000 meow
4

1 に答える 1

2

OverloadedStrings最初のエラーは、言語拡張機能を有効にしなかったためです。それがなければ、a"xyz"はですが、String引数としてData.Text.append2つTextのsを取ります。追加

{-# LANGUAGE OverloadedStrings #-}

モジュールの上部に移動して、モジュールを修正します。

2番目のエラーは、の3番目の引数runServerがタイプでなければならないためです。

Request -> WebSockets p0 ()

しかし、あなたはそれに与えましたWebSockets p1 ()。アクションを渡したい場合は、それを関数に持ち上げる必要があります。

main = runServer "0.0.0.0" 8000 $ const meow

コンパイルします(それが機能するかどうか[あなたが望むことをする]は私が答えることができない質問です、それはただすべての要求を無視し、常に同じことをします)。

于 2013-01-25T12:22:30.820 に答える