Руководство по WAI - нет экземпляра для (Показать ответ) - PullRequest
0 голосов
/ 04 декабря 2018

Опять n00b здесь: пробуем Warp и WAI со следующим кодом, как в документации.

{-# LANGUAGE OverloadedStrings, DeriveGeneric #-}
import Network.Wai
import Network.HTTP.Types
import Network.Wai.Handler.Warp (run)
app3 :: Application
app3 request respond = respond $ case rawPathInfo request of
    "/"     -> index
    "/raw/" -> plainIndex
    _       -> notFound

plainIndex :: Response
plainIndex = responseFile
    status200
    [("Content-Type", "text/plain")]
    "index.html"
    Nothing

notFound :: Response
notFound = responseLBS
    status404
    [("Content-Type", "text/plain")]
    "404 - Not Found"

Запуск plainIndex в GHCi возвращает:

<interactive>:12:1: error:
    • No instance for (Show Response) arising from a use of ‘print’
    • In a stmt of an interactive GHCi command: print it
*Main> :r
[1 of 1] Compiling Main             ( WAI.hs, interpreted )

Два вопроса в одном: можете ли вы помочь мне исправить это, и в дополнение к этому: я единственный, с кем часто сталкиваюсьтакие проблемы, когда следующие примеры документации?

1 Ответ

0 голосов
/ 04 декабря 2018

Запуск plainIndex в GHCi, GHCi пытается вычислить Response и затем распечатать его в терминале.Экземпляр Show определяет, как данный тип должен быть представлен как String.Авторы библиотеки решили не предоставлять экземпляр Show для Response, вероятно, чтобы отделить его представление от интерфейса.

Различные части ответа имеют Show экземпляров, поэтому вы можете использовать средства доступа, предоставляемые Wai :

> responseStatus plainIndex
> responseHeaders plainIndex

Дополнительная документация для ответа .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...