Arrow の do 記法
id:syd_syd さんに教えていただいた arrow の do 記法。do 記法内でバインドした値は(おそらく) arrow の中に入れることしかできない。つまり arrow として使えない。僕はよくわかっていないんですが。
{-# OPTIONS -farrows #-} import Control.Arrow listcase [] = Left () listcase (x:xs) = Right (x,xs) mapA f = proc xs -> do t <- listcase -< xs case t of Left () -> returnA -< [] Right (x,xs) -> do y <- f -< x ys <- mapA f -< xs returnA -< y:ys
それと、id:suer さんによって、
t <- listcase -< xs
が、"listcase" というラベル付きの arrow に xs を入れているというふうに見るべきだ、との素晴らしい指摘を受けました。