一意性誤解してた。便利になると思ったが不都合発見。

module test
import StdEnv
::TestData = {a::!Int, b::!Int}

test1:: TestData -> *TestData
test1 xx=:{a,b} #!xx2 = {xx & a=a+1}
// = {xx & b=a+b+1} // xx , xx2の違い、コンパイルが通る。aの値もわかりにくい
= {xx2& b=a+b+1}

test2 :: *TestData -> *TestData
test2 xx=:{a,b} = {a=100+a,b=100+b}

test3:: {#Real}
test3 = {1.0,2.0}

Start #! (xx, yy) = (test1 cc, test1 cc)
#! xx = test2 xx
= (test1 xx, yy , test1 yy, test3.[1])
where cc = {a=1,b=2}