TypeBehavior

io.getquill.norm.TypeBehavior
See theTypeBehavior companion object
sealed trait TypeBehavior

How do we want beta reduction to treat Quats? Typically the right answer is when any variable x type X is reduced to t type T we check that T is a subtype of X and replace it e.g:

x.foo reduce v:V -> t:T where V is
CC(foo:V) and T is CC(foo:V, bar:V)

(NOTE: see the notes on Quat Shorthand Syntax in Quats.scala if unfamiliar with the syntax above) However if T is not a subtype of X, then we need to throw an error. The exception to this is in the case where we are substituting a real type for a Quat.Null or Quat.Generic (roughly speaking, a 'Bottom Type'). In that case, just do the substitution. This general behavior we call SubstituteSubtypes, it is also considered the default.

The behavior with variable-renaming in PropagateRenames is and ReifyLiftings slightly different. In these cases, it is a carte-blanche replacement of properties that is necessary. In this case we are either plugging in a Generic type that is being specialized (e.g. X is Quat.Generic) or reducing some type CC(foo:V) to the corresponding renamed type CC(foo:V)[foo->renameFoo]. This general behavior we call ReplaceWithReduction i.e. Quat types are replaced with whatever variables are being beta-reduced irregardless of subtyping.

Attributes

Companion
object
Graph
Supertypes
class Object
trait Matchable
class Any
Known subtypes
object ReplaceWithReduction.type
object SubstituteSubtypes.type
In this article