just some notes about ideas for now:
*TYPE (
' combine types to one single type
*Combine, {
?A : #TYPE
!C : TYPE
}
)
' type for potentially undefined result
*Result {
?T
|Error
|NotImplemented
|Undefined
|Some : T
}
' example for combining types
*Geometry.Object (
' either empty or generic implementation of object intersection
*Intersect {
?a : Object
?b : Object
!c : Result:Object
}
)
*CompanyA.Geometry.ObjectOps : Geometry.Object (
*Intersect {
?a : Line
?b : Line
!c : Point
}
)
*CompanyB.Geometry.ObjectOps (
Geometry.Object
*IntersectLineLine : Geometry.Object.Intersect {
?a : Line
?b : Line
!c : Point
}
)
*SomeCode {
' prefer the implementation of the first type in the combination (in this case CompanyA's)
ObjectOps : CompanyA.Geometry.ObjectOps,CompanyB.Geometry.ObjectOps
p : ObjectOps.Intersect : l0 l1
' or
Intersect : CompanyA.Geometry.ObjectOps.Intersect,CompanyB.Geometry.ObjectOps.IntersectLineLine
p : ObjectOps.Intersect : l0 l1
}
comments