import Base import ./main.bend as V # Test/proof fixtures only: drop successful unit results to compose known # in-domain traces. Behavioral laws separately constrain fallible results. def vector(-T: Data, pair: V.Vec & Result) -> V.Vec: (v,r) = pair v def contents_pair(-T: Data, pair: V.Vec & List) -> List: (v,xs) = pair xs def contents(-T: Data, v: V.Vec) -> List: contents_pair(T,V.Vec.to_list(T,v)) def result(-T: Data, pair: V.Vec & Result) -> Result: (v,r) = pair r def unit_result(-T: Data, pair: V.Vec & Result) -> Result: (v,r) = pair r def slice_result(-T: Data, pair: V.Vec & Result>) -> Result>: (v,r) = pair r def metadata(-T: Data, pair: V.Vec & U32) -> U32: (v,n) = pair n def pop_contents(-T: Data, pair: V.Vec & Result) -> List & Result: (v,r) = pair (contents(T,v),r) def unit_contents(-T: Data, pair: V.Vec & Result) -> List & Result: (v,r) = pair (contents(T,v),r) def one(-T: Data, x: T) -> V.Vec: vector(T,V.Vec.push(T,V.Vec.new(T),x)) def two(-T: Data, x: T, y: T) -> V.Vec: vector(T,V.Vec.push(T,one(T,x),y)) def three(-T: Data, x: T, y: T, z: T) -> V.Vec: vector(T,V.Vec.push(T,two(T,x,y),z)) def five(-T: Data, a: T, b: T, c: T, d: T, e: T) -> V.Vec: vector(T,V.Vec.push(T,vector(T,V.Vec.push(T,three(T,a,b,c),d)),e)) def value_vector(-T: Data, pair: V.Vec & Result) -> V.Vec: (v,r) = pair v