1 import Base 2 # Typed operational uses; capture has no synthetic schema resource identity. 3 type Target is Data: 4 Component{key:String} 5 Resource{key:String} 6 Capture{} 7 type Mode is Data:Write{} 8 type Use is Data:Use{target:Target,mode:Mode} 9 type Description is Data:Description{uses:List<&2,Use>,opaque:Bool} 10 def none() -> Description:Description{[],True{}} 11 def known(uses:List<&2,Use>) -> Description:Description{uses,False{}} 12 def pair(left:Description,right:Description) -> Description: 13 match left right: 14 case Description{a,oa} Description{b,ob}:Description{List.append(&2,Use,a,b),Bool.or(oa,ob)} 15 def complete(value:Description) -> Bool: 16 match value: 17 case Description{_,opaque}:Bool.not(opaque)