小编aut*_*322的帖子

针对每个请求数据的中间件

clojure,我可以写这样的东西:

(defn wrap-my-header
  [handler]
  (fn [request]
    (let [request (if (get-in request [:headers "my-header"])
                    (assoc request :has-my-header? true)
                    request)]
      (handler request))))
Run Code Online (Sandbox Code Playgroud)

在这个中间件,我检查,如果我在有一个非空值my-header:headers,如果是,我将在附加一些数据request映射.这表明我可以对待requestresponse作为一种有点"有状态"的数据.

我仍然是哈斯克尔的新人,并且想做类似的事情scotty.在查看中间件的类型后,我可以创建这样的中间件:

myMiddleware :: Middleware 
myMiddleware app req respond = app req respond
Run Code Online (Sandbox Code Playgroud)

在长时间盯着这个类型后,我仍然不知道该怎么做.一些阅读和思考让我认为这是不可能的,Middleware只能使处理程序短路和/或改变生成的响应.这是真的?


haskell clojure haskell-wai

6
推荐指数
1
解决办法
150
查看次数

nix 覆盖中的自我和超级

在 nix 中,overlay 是一个带有 2 个参数的函数:selfsuper。基于手册self对应于最终的包集(或其他一些人称之为固定点计算的结果)并且仅在处理依赖项时使用。Whilesuper是前几个阶段的评估结果,nixpkgs仅在您引用要覆盖或访问某些功能的包时使用。

可悲的是,我真的不明白这一点。nixpkgs覆盖层以什么方式更新,从而有上面提到的 2 个限制?

nix

5
推荐指数
1
解决办法
856
查看次数

Servant QueryParams解析错误

给出以下代码:

newtype HelloMessage = HelloMessage { msg :: String }
  deriving (Generic)

instance ToJSON HelloMessage

type API2 = "hello"
            :> QueryParam "age" Int
            :> Get '[JSON] HelloMessage

appAPI2 :: Proxy API2
appAPI2 = Proxy

myHandler :: Server API2
myHandler = helloHandler
  where
    helloHandler :: Maybe Int -> Handler HelloMessage
    helloHandler mAge =
      let
        sAge = case mAge of
                 Nothing -> "0"
                 Just ag -> show ag
      in
        return . HelloMessage $ sAge

app2 :: Application
app2 = serve appAPI2 myHandler …
Run Code Online (Sandbox Code Playgroud)

haskell servant

3
推荐指数
1
解决办法
157
查看次数

标签 统计

haskell ×2

clojure ×1

haskell-wai ×1

nix ×1

servant ×1