Analyzing types occurring in values ----------------------------------- The `TypesInValues` analysis is a type analysis which assigns to each data type defined in a program the list of data types (type constructors) which might occur in value arguments of this type. For instance, no type constructors are associated to `Bool` since Boolean values have no arguments. The type constructor `[]` is associated to the `[]` since a list occurs in the second argument of a non-empty list. Thus, this analysis can be used to check for recursive types: if a type constructor is associated to itself, the type is recursive, i.e., can have values of arbitrary size. For instance, consider the following type declarations: data List a = Empty | Cons a (List a) data Tree a = Leaf | Node (List (Tree a)) Then this analysis computes the following information: List : List Tree : List, Tree Hence, both types are recursive.