From 0f876db7d5e4096f82c20ad8a0117b9f9fe7ca32 Mon Sep 17 00:00:00 2001
From: Chris Lattner
+For our purposes below, we need three concepts. First, an "Opaque Type" is +exactly as defined in the language +reference. Second an "Abstract Type" is any type which includes an +opaque type as part of its type graph (for example "{ opaque, int }"). +Third, a concrete type is a type that is not an abstract type (e.g. "[ int, +float }"). +
+ @@ -1093,8 +1102,8 @@ changes. To support this, a class can derive from the AbstractTypeUser class. This class allows it to get callbacks when certain types are resolved. To register to get callbacks for a particular type, the DerivedType::{add/remove}AbstractTypeUser -methods can be called on a type. Note that these methods only work for {\em -abstract} types. Concrete types (those that do not include an opaque objects +methods can be called on a type. Note that these methods only work for +abstract types. Concrete types (those that do not include an opaque objects somewhere) can never be refined. -- cgit v1.2.3-18-g5258