Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What does the GHC source mean by "zonk"?

Tags:

haskell

ghc

I'm working on a plugin for GHC, so I'm reading the documentation for some of its implementation.

The verb "to zonk" is all over the place, but I can't track down an explanation of what it means to zonk something or (in broad terms) when one might want to. I can find plenty of notes about complicated circumstances under which it is necessary to zonk or not to zonk something, but without a clue as to what the big picture is I am having a lot of trouble following.

like image 472
Doug McClean Avatar asked Aug 08 '15 02:08

Doug McClean


1 Answers

An un-zonked type can have type variables which are mutable references filled in during unification (and this mutability is heavily used by the type checker to increase performance). Zonking traverses a type and replaces all mutable references with the type that they dereference to; thus, the resulting structure is immutable and requires no dereferencing to interpret.

Note that these type variables are meta-variables, i.e. they don't correspond to the type variables introduced by polymorphism; rather, they are unification variables to be replaced by real types. The choice of replacement is decided by the type checking/type inference process, and then the actual replacement is done during zonking.

This notion of zonking extends naturally to other intermediate representations of the typechecker that contain types.

like image 156
Cactus Avatar answered Oct 14 '22 07:10

Cactus