Pytanie Przykład minimalnego serwera warp


Chcę utworzyć stronę internetową za pomocą osnowa serwer w Haskell. Ponieważ jestem początkującym Haskellem, przykłady takie jak ten są dla mnie skomplikowane.

Czy ktoś może pokazać mi prosty, minimalny przykład tego, jak go używać osnowa?

Uwaga: Pytanie to celowo nie wykazuje wysiłku badawczego, ponieważ otrzymał odpowiedź na pytania i odpowiedzi.


31
2018-03-24 20:49


pochodzenie




Odpowiedzi:


Oto minimum Witaj świecie aplikacja korzystająca z osnowy 3.0+. Uruchom go, a następnie przejdź do http://localhost:3000. Ten przykład zostanie wyświetlony Hello world.

Aby ten przykład był minimalny, ścieżki adresów URL w ogóle nie są obsługiwane (ta sama treść jest dostarczana dla dowolnej ścieżki). Dla nieco dłuższego przykładu obejmującego obsługę ścieżek URL patrz Wiki Haskell

{-# LANGUAGE OverloadedStrings #-}

import Network.Wai (responseLBS, Application)
import Network.Wai.Handler.Warp (run)
import Network.HTTP.Types (status200)
import Network.HTTP.Types.Header (hContentType)

main = do
    let port = 3000
    putStrLn $ "Listening on port " ++ show port
    run port app

app :: Application
app req f =
    f $ responseLBS status200 [(hContentType, "text/plain")] "Hello world!"

Aktualizacja 2014-06-20: warp 3.0 zawiera pewne zmiany API - odzwierciedlić je z powrotem w kodzie.


45
2018-03-24 20:49



Wyjaśnij, co się dzieje, po prostu nie wpłynie to na post! - Uli Köhler
ten przykład nie działa na bieżącą wersję Warp (3.0.0.3)? Nie można dopasować typu Network.Wai.Internal.Response' with IO Network.Wai.Internal.ResponseReceived " - Fil
@Fil Dziękuję za raport, przyjrzę się temu! - Uli Köhler
@Fil Naprawiono to. Powinien teraz działać z warp 3.0+ - Uli Köhler
Zwróć uwagę, że pierwsza linia zawiera OverloadedString jest znaczący, ponieważ pozwala na konwersję normalnych łańcuchów na ByteStrings. W przeciwnym razie ten przykład musiałby zostać zmodyfikowany, aby jawnie konwertować łańcuchy takie jak "text/plain" i "Hello world!" do ByteStrings przez Blaze.ByteString.Builder.Char8 i / lub Data.ByteString.Char8. - elliot42