这似乎是一件合理的事情,但我遇到了类型问题。我想要一个Client
可以向 a 发送选项列表的 a Server
,它将选择一个并返回所选元素。所以是这样的:
module Toy where
import Pipes
asker :: Monad m => () -> Client ([a], a -> String) a m ()
asker () = do
_ <- request ([0.0, 2.0], show)
_ <- request (["3", "4"], show)
return ()
这个想法是服务器可以a -> String
在列表的每个元素上调用该函数以将它们显示给用户。只要列表和函数匹配,我希望能够改变 a。
这样的事情可能吗?也许我想要的约束可以以某种方式编码到 GADT 中?