これは理にかなっているように思えますが、タイプの問題があります。Client
オプションのリストを に送信できる が必要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にエンコードできますか?