이것은 합리적인 것 같지만 유형 문제가 있습니다. Server
에 옵션 목록을 보낼 수있는 Client
을 갖고 싶습니다. 그러면 하나를 선택하고 선택한 요소를 반환합니다. 이 같은 일이 :동적 요청/응답 유형의 파이프?
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
함수를 호출 할 수 있다는 것입니다. 리스트와 함수가 일치하는 한, 변화시킬 수 있어야합니다.
이렇게 할 수 있나요? 내가 원하는 제약 조건을 어떻게 든 GADT에 인코딩 할 수 있을까요?
요청으로 서버가 무엇을합니까? 어떤 유형을 얻을지 모르는 경우 어떻게 할 수 있습니까? 해당 형식을 String으로 변환 할 수있는 경우 (함수를 사용하여), 첫 번째 경우에는 String을 전달하지 않는 이유는 무엇입니까? – bennofs
나는 그것이 사실이라고 생각한다. 문자열에서 응답을 다시 변환하지 않아도 좋지만 큰 문제는 아닙니다. – ajp
@ajp : (a) 클라이언트가 인터페이스 (* '*'예 : * '보기')를 준수하는 * * 유형의 값을 보냅니다. (b) 서버는 * any * 유형의 값을 허용합니다. (c) 클라이언트가 서버로부터 응답을 받으면 어떤 유형의 메시지인지를 알 수 있습니까? 단계 (c)가 고착 지점이 될 것입니다 (서버가 동일한 값으로 응답하기로 결정하거나 전혀 응답하지 않는 경우 어떻게되는지 고려하십시오). 당신은 아마도 합계 타입이나'Typeable' /'Dynamic' 같은 것을 원할 것입니다. 존재 유형 (GADT로 얻는 것)은 원래 유형이 무엇인지 알기 위해 압축을 풀 수 없습니다. –