askP = P.constructT P.kleisli0 $ do lift $ putStrLn "情報を入力して下さい" forever $ do lbl <- P.await lift $ putStr (lbl ++ ": ") ct <- lift $ getLine P.yield (lbl, ct) registerP = do r <- runKleisli (P.run askP) ["Zip code", "Address", "Name"] print r ほとんど間違い探しのレベルですね。真似して作ったので仕方ない。machinecell側にだけkleisliという見慣れない名前が見えますが、これは型合わせだと思って無視して頂いてOKです。 上のコードは、ちょっと変則的ですが、pipe系の汎用性をデモするために「データの中間加工時に副作用を起こす処理」を実装して
![Arrow化pipeはFRPの夢を見るか? - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/43fa0525e7a63c20866f9a6b2d4cd843564ec084/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZoPTMzNiZ0eHQ9QXJyb3clRTUlOEMlOTZwaXBlJUUzJTgxJUFGRlJQJUUzJTgxJUFFJUU1JUE0JUEyJUUzJTgyJTkyJUU4JUE2JThCJUUzJTgyJThCJUUzJTgxJThCJUVGJUJDJTlGJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LWNsaXA9ZWxsaXBzaXMmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz1mYzEyN2JmYmQyZTFlNjA1ZjAzNjUxMDhmMTgzY2Y0OA%26mark-x%3D142%26mark-y%3D112%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTYxNiZ0eHQ9JTQwYXNfY2FwYWJsJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz1lNGYzZTcxZGJiMGI0OGZlMWIyMTQ3OTg2MWI4NWY0Ng%26blend-x%3D142%26blend-y%3D491%26blend-mode%3Dnormal%26s%3D60e0e1b8a75400b32c47cf3911d3a928)