3

firstライブラリでの実装がわかりません。

firstで再帰的に定義されているようです***-- いつ再帰が終了するかわかりません!?

first :: a b c -> a (b,d) (c,d)
first = (*** id)

(***) :: a b c -> a b' c' -> a (b,b') (c,c')
f *** g = first f >>> arr swap >>> first g >>> arr swap
    where swap ~(x,y) = (y,x)

first f(f *** id)どれで(first f >>> arr swap >>> first id...)、新しいものfirstは別のものになる(*** id)など...

4

1 に答える 1