Input 모나드는 먼저 저기 wait에서 주는 EraConsoleResponse 타입을 적절히 처리해주는 모나드입니다
먼저 YmInput trait를 만들고 출력처리와 Request획득 그리고 응답을 파싱하는 메소드를 만듭니다
그리고 이 YmInput의 함수들로 직접 T를 얻는 핸들러가 바로
YmValidInput trait 입니다 저기에 console만 넣으면 알아서 YmResult T를 뽑아줍니다
이제 이 모나드들을 활용할 타입들을 만들어봅시다
먼저 YmInput들을 엮을 combinator를 만들었습니다
and_then과 map입니다
and_then은 하스켈로치면 bind와 같습니다
그리고 YmInput을 YmValidInput으로 만들어줄 validator입니다
DefaultValue는 parse에 실패했을경우 저장된 기본값을 복사해서 넘겨줍니다
그래서 T: Clone이 필요하고요
FailAction은 parse에 실패했을때 저장된 action을 실행하고 다시 반복합니다
이때 action의 반환값이 Some일경우엔 그걸 그대로 반환시켜줍니다
이제 얘들을 편리하게 사용시켜줄 trait를 하나 만들었습니다
YmInputExt입니다 모든 YmInput을 구현한 Sized 타입은 이 타입을 구현하기에 이 맴버 함수들을 쓸수있습니다
이제 기반 타입들을 다 만들었으니 쓰기 편리한 유틸함수를 만들어봅시다
btns와 timeout으로 YmInput을 만들어주는 함수입니다
YmBaseInput은
별거없고 그냥 클로저랑 Request 래핑해놓은 타입입니다
이제 구조가 대강 완성됐으니 실제로 써보겠습니다
먼저 유틸함수와 validator로 ValidInput을 만듭니다
그리고 await 매크로에 넣으면 뿅
"이해됐는가? 아니오." 콘 - 훈다리 훈다리
모나드 츄라이
근데 Ym은 뭔 뜻임? - 훈다리 훈다리
만드는 겜 이름
구아아악
궁금한 게 DefaultValue::run에서 'a 수명 지정한 거 빼면 무슨 문제가 생김?
async fn은 수명 여러개를 elision시켜주지 못해서 컴파일 에러남
겜완성하면 스팀에 올림?
아니