Concurrent Clean : CleanJ : push_args_u

懸案のpush_args_uは、レコード型のパターンマッチをするときに使われるらしい。
以下、テストコード。

::Rec1 = {r1i :: Int, r1s :: String, r1r :: Rec2}
::Rec2 = {r2i :: Int, r2s :: String, r2r :: Rec3}
::Rec3 = {r3i :: Int, r3s :: String}

Start = addup $ create1 3

create1 a = {r1i = a
            ,r1s = {x \\ x <- repeat 'a' & y <- [0..a]}
            ,r1r = create2 (a+1)}
create2 a = {r2i = a
            ,r2s = {x \\ x <- repeat 'a' & y <- [0..a]}
            ,r2r = create3 (a+1)}
create3 a = {r3i = a
            ,r3s = {x \\ x <- repeat 'a' & y <- [0..a]}}

addup :: !Rec1 -> Int
addup {r1i, r1r={r2i, r2r={r3i}}}
    = r1i + r2i + r3i