diff --git a/103/lib/pkg/array-1.0.0.0/103/cr/plain/Data/Array.hi b/103/lib/pkg/array-1.0.0.0/103/cr/plain/Data/Array.hi
Binary files a/103/lib/pkg/array-1.0.0.0/103/cr/plain/Data/Array.hi and b/103/lib/pkg/array-1.0.0.0/103/cr/plain/Data/Array.hi differ
diff --git a/103/lib/pkg/array-1.0.0.0/103/cr/plain/installed-pkg-config b/103/lib/pkg/array-1.0.0.0/103/cr/plain/installed-pkg-config
--- a/103/lib/pkg/array-1.0.0.0/103/cr/plain/installed-pkg-config
+++ b/103/lib/pkg/array-1.0.0.0/103/cr/plain/installed-pkg-config
@@ -1,2 +1,2 @@
 exposed-modules: Data.Array
-build-depends: uhcbase-1.1.8.7 base-3.0.0.0
+build-depends: uhcbase-1.1.8.10 base-3.0.0.0
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Applicative.cr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Applicative.cr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Applicative.cr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Applicative.cr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Applicative.crr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Applicative.crr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Applicative.crr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Applicative.crr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Applicative.hi b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Applicative.hi
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Applicative.hi and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Applicative.hi differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Arrow.cr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Arrow.cr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Arrow.cr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Arrow.cr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Arrow.crr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Arrow.crr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Arrow.crr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Arrow.crr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Arrow.hi b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Arrow.hi
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Arrow.hi and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Arrow.hi differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Category.cr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Category.cr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Category.cr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Category.cr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Category.crr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Category.crr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Category.crr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Category.crr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Category.hi b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Category.hi
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Category.hi and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Category.hi differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/Fix.cr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/Fix.cr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/Fix.cr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/Fix.cr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/Fix.crr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/Fix.crr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/Fix.crr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/Fix.crr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/Fix.hi b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/Fix.hi
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/Fix.hi and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/Fix.hi differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/Instances.cr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/Instances.cr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/Instances.cr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/Instances.cr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/Instances.crr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/Instances.crr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/Instances.crr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/Instances.crr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/Instances.hi b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/Instances.hi
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/Instances.hi and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/Instances.hi differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/ST.cr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/ST.cr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/ST.cr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/ST.cr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/ST.crr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/ST.crr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/ST.crr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/ST.crr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/ST.hi b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/ST.hi
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/ST.hi and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/ST.hi differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/ST/Lazy.cr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/ST/Lazy.cr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/ST/Lazy.cr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/ST/Lazy.cr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/ST/Lazy.crr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/ST/Lazy.crr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/ST/Lazy.crr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/ST/Lazy.crr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/ST/Lazy.hi b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/ST/Lazy.hi
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/ST/Lazy.hi and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/ST/Lazy.hi differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Bool.hi b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Bool.hi
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Bool.hi and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Bool.hi differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Complex.cr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Complex.cr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Complex.cr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Complex.cr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Complex.crr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Complex.crr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Complex.crr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Complex.crr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Complex.hi b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Complex.hi
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Complex.hi and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Complex.hi differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Dynamic.cr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Dynamic.cr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Dynamic.cr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Dynamic.cr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Dynamic.crr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Dynamic.crr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Dynamic.crr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Dynamic.crr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Dynamic.hi b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Dynamic.hi
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Dynamic.hi and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Dynamic.hi differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Eq.hi b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Eq.hi
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Eq.hi and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Eq.hi differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Foldable.cr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Foldable.cr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Foldable.cr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Foldable.cr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Foldable.crr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Foldable.crr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Foldable.crr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Foldable.crr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Foldable.hi b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Foldable.hi
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Foldable.hi and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Foldable.hi differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Function.cr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Function.cr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Function.cr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Function.cr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Function.crr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Function.crr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Function.crr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Function.crr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Function.hi b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Function.hi
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Function.hi and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Function.hi differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ix.hi b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ix.hi
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ix.hi and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ix.hi differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Monoid.cr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Monoid.cr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Monoid.cr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Monoid.cr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Monoid.crr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Monoid.crr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Monoid.crr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Monoid.crr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Monoid.hi b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Monoid.hi
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Monoid.hi and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Monoid.hi differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ord.cr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ord.cr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ord.cr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ord.cr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ord.crr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ord.crr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ord.crr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ord.crr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ord.hi b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ord.hi
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ord.hi and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ord.hi differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ratio.cr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ratio.cr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ratio.cr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ratio.cr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ratio.crr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ratio.crr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ratio.crr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ratio.crr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ratio.hi b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ratio.hi
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ratio.hi and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ratio.hi differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/String.cr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/String.cr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/String.cr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/String.cr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/String.crr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/String.crr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/String.crr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/String.crr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/String.hi b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/String.hi
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/String.hi and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/String.hi differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Traversable.cr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Traversable.cr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Traversable.cr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Traversable.cr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Traversable.crr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Traversable.crr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Traversable.crr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Traversable.crr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Traversable.hi b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Traversable.hi
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Traversable.hi and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Traversable.hi differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Numeric.cr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Numeric.cr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Numeric.cr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Numeric.cr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Numeric.crr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Numeric.crr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Numeric.crr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Numeric.crr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Numeric.hi b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Numeric.hi
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Numeric.hi and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Numeric.hi differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Prelude.hi b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Prelude.hi
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Prelude.hi and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Prelude.hi differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/System/Console/GetOpt.cr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/System/Console/GetOpt.cr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/System/Console/GetOpt.cr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/System/Console/GetOpt.cr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/System/Console/GetOpt.crr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/System/Console/GetOpt.crr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/System/Console/GetOpt.crr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/System/Console/GetOpt.crr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/System/Console/GetOpt.hi b/103/lib/pkg/base-3.0.0.0/103/cr/plain/System/Console/GetOpt.hi
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/System/Console/GetOpt.hi and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/System/Console/GetOpt.hi differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/System/Exit.cr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/System/Exit.cr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/System/Exit.cr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/System/Exit.cr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/System/Exit.crr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/System/Exit.crr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/System/Exit.crr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/System/Exit.crr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/System/Exit.hi b/103/lib/pkg/base-3.0.0.0/103/cr/plain/System/Exit.hi
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/System/Exit.hi and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/System/Exit.hi differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/ParserCombinators/ReadP.cr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/ParserCombinators/ReadP.cr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/ParserCombinators/ReadP.cr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/ParserCombinators/ReadP.cr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/ParserCombinators/ReadP.crr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/ParserCombinators/ReadP.crr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/ParserCombinators/ReadP.crr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/ParserCombinators/ReadP.crr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/ParserCombinators/ReadP.hi b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/ParserCombinators/ReadP.hi
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/ParserCombinators/ReadP.hi and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/ParserCombinators/ReadP.hi differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/ParserCombinators/ReadPrec.cr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/ParserCombinators/ReadPrec.cr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/ParserCombinators/ReadPrec.cr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/ParserCombinators/ReadPrec.cr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/ParserCombinators/ReadPrec.crr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/ParserCombinators/ReadPrec.crr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/ParserCombinators/ReadPrec.crr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/ParserCombinators/ReadPrec.crr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/ParserCombinators/ReadPrec.hi b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/ParserCombinators/ReadPrec.hi
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/ParserCombinators/ReadPrec.hi and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/ParserCombinators/ReadPrec.hi differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Read.hi b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Read.hi
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Read.hi and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Read.hi differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Read/Lex.cr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Read/Lex.cr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Read/Lex.cr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Read/Lex.cr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Read/Lex.crr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Read/Lex.crr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Read/Lex.crr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Read/Lex.crr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Read/Lex.hi b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Read/Lex.hi
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Read/Lex.hi and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Read/Lex.hi differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Show.cr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Show.cr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Show.cr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Show.cr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Show.crr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Show.crr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Show.crr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Show.crr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Show.hi b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Show.hi
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Show.hi and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Show.hi differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Show/Functions.cr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Show/Functions.cr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Show/Functions.cr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Show/Functions.cr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Show/Functions.crr b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Show/Functions.crr
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Show/Functions.crr and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Show/Functions.crr differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Show/Functions.hi b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Show/Functions.hi
Binary files a/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Show/Functions.hi and b/103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Show/Functions.hi differ
diff --git a/103/lib/pkg/base-3.0.0.0/103/cr/plain/installed-pkg-config b/103/lib/pkg/base-3.0.0.0/103/cr/plain/installed-pkg-config
--- a/103/lib/pkg/base-3.0.0.0/103/cr/plain/installed-pkg-config
+++ b/103/lib/pkg/base-3.0.0.0/103/cr/plain/installed-pkg-config
@@ -1,2 +1,2 @@
 exposed-modules: Control.Applicative Control.Arrow Control.Category Control.Monad.Fix Control.Monad.Instances Control.Monad.ST.Lazy Control.Monad.ST Data.Bool Data.Complex Data.Dynamic Data.Eq Data.Foldable Data.Function Data.Ix Data.Monoid Data.Ord Data.Ratio Data.String Data.Traversable Numeric Prelude System.Console.GetOpt System.Environment System.Exit Text.ParserCombinators.ReadP Text.ParserCombinators.ReadPrec Text.Read.Lex Text.Read Text.Show.Functions Text.Show
-build-depends: uhcbase-1.1.8.7
+build-depends: uhcbase-1.1.8.10
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Control/Monad.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Control/Monad.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Control/Monad.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Control/Monad.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Control/Monad.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Control/Monad.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Control/Monad.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Control/Monad.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Control/Monad.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Bits.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Bits.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Bits.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Bits.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Bits.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Bits.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Bits.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Bits.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Bits.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Char.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Char.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Char.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Char.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Char.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Char.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Char.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Char.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Char.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Either.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Either.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Either.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Either.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Either.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Either.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Either.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Either.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Either.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/IORef.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/IORef.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/IORef.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/IORef.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/IORef.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/IORef.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/IORef.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/IORef.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/IORef.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/List.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/List.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/List.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/List.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/List.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/List.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/List.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/List.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/List.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Maybe.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Maybe.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Maybe.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Maybe.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Maybe.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Maybe.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Maybe.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Maybe.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Maybe.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Typeable.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Typeable.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Typeable.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Typeable.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Typeable.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Typeable.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Typeable.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Typeable.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Typeable.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Debug/Trace.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Debug/Trace.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Debug/Trace.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Debug/Trace.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Debug/Trace.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Debug/Trace.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Debug/Trace.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Debug/Trace.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Debug/Trace.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Foreign/Ptr.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Foreign/Ptr.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Foreign/Ptr.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Foreign/Ptr.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Foreign/Ptr.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Foreign/Ptr.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Foreign/Ptr.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Foreign/Ptr.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Foreign/Ptr.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Foreign/StablePtr.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Foreign/StablePtr.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Foreign/StablePtr.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Foreign/StablePtr.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Foreign/StablePtr.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Foreign/StablePtr.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Foreign/StablePtr.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Foreign/StablePtr.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Foreign/StablePtr.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO/Error.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO/Error.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO/Error.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO/Error.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO/Error.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO/Error.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO/Error.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO/Error.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO/Error.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO/Fix.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO/Fix.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO/Fix.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO/Fix.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO/Fix.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO/Fix.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO/Fix.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO/Fix.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO/Fix.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO/Unsafe.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO/Unsafe.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO/Unsafe.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO/Unsafe.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO/Unsafe.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO/Unsafe.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO/Unsafe.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO/Unsafe.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO/Unsafe.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Array.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Array.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Array.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Array.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Array.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Array.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Array.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Array.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Array.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Base.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Base.cr
new file mode 100644
# file too large to diff: 103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Base.cr
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Base.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Base.crr
new file mode 100644
# file too large to diff: 103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Base.crr
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Base.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Base.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Base.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Bits.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Bits.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Bits.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Bits.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Bits.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Bits.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Bits.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Bits.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Bits.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Bounded.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Bounded.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Bounded.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Bounded.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Bounded.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Bounded.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Bounded.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Bounded.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Bounded.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/BoxArray.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/BoxArray.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/BoxArray.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/BoxArray.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/BoxArray.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/BoxArray.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/BoxArray.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/BoxArray.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/BoxArray.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Char.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Char.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Char.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Char.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Char.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Char.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Char.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Char.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Char.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Enum.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Enum.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Enum.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Enum.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Enum.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Enum.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Enum.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Enum.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Enum.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Eq.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Eq.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Eq.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Eq.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Eq.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Eq.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Eq.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Eq.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Eq.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Float.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Float.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Float.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Float.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Float.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Float.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Float.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Float.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Float.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/GC.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/GC.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/GC.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/GC.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/GC.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/GC.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/GC.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/GC.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/GC.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Generics.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Generics.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Generics.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Generics.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Generics.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Generics.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Generics.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Generics.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Generics.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Generics/Tuple.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Generics/Tuple.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Generics/Tuple.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Generics/Tuple.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Generics/Tuple.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Generics/Tuple.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Generics/Tuple.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Generics/Tuple.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Generics/Tuple.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Handle.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Handle.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Handle.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Handle.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Handle.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Handle.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Handle.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Handle.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Handle.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/IO.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/IO.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/IO.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/IO.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/IO.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/IO.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/IO.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/IO.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/IO.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/IOBase.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/IOBase.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/IOBase.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/IOBase.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/IOBase.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/IOBase.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/IOBase.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/IOBase.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/IOBase.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Ix.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Ix.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Ix.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Ix.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Ix.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Ix.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Ix.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Ix.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Ix.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/LazyST.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/LazyST.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/LazyST.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/LazyST.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/LazyST.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/LazyST.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/LazyST.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/LazyST.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/LazyST.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/MVar.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/MVar.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/MVar.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/MVar.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/MVar.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/MVar.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/MVar.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/MVar.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/MVar.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/MutVar.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/MutVar.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/MutVar.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/MutVar.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/MutVar.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/MutVar.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/MutVar.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/MutVar.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/MutVar.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/OldException.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/OldException.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/OldException.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/OldException.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/OldException.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/OldException.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/OldException.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/OldException.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/OldException.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Ord.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Ord.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Ord.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Ord.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Ord.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Ord.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Ord.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Ord.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Ord.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Prims.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Prims.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Prims.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Prims.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Prims.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Prims.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Prims.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Prims.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Prims.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Ptr.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Ptr.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Ptr.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Ptr.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Ptr.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Ptr.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Ptr.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Ptr.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Ptr.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Read.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Read.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Read.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Read.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Read.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Read.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Read.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Read.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Read.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Real.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Real.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Real.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Real.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Real.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Real.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Real.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Real.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Real.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Run.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Run.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Run.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Run.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Run.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Run.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Run.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Run.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Run.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/ST.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/ST.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/ST.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/ST.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/ST.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/ST.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/ST.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/ST.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/ST.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/STRef.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/STRef.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/STRef.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/STRef.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/STRef.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/STRef.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/STRef.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/STRef.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/STRef.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Show.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Show.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Show.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Show.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Show.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Show.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Show.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Show.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Show.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/StablePtr.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/StablePtr.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/StablePtr.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/StablePtr.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/StablePtr.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/StablePtr.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/StablePtr.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/StablePtr.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/StablePtr.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/StackTrace.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/StackTrace.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/StackTrace.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/StackTrace.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/StackTrace.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/StackTrace.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/StackTrace.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/StackTrace.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/StackTrace.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Types.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Types.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Types.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Types.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Types.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Types.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Types.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Types.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Types.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Weak.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Weak.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Weak.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Weak.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Weak.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Weak.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Weak.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Weak.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Weak.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/WeakPtr.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/WeakPtr.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/WeakPtr.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/WeakPtr.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/WeakPtr.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/WeakPtr.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/WeakPtr.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/WeakPtr.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/WeakPtr.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Unsafe/Coerce.cr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Unsafe/Coerce.cr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Unsafe/Coerce.cr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Unsafe/Coerce.crr b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Unsafe/Coerce.crr
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Unsafe/Coerce.crr differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Unsafe/Coerce.hi b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Unsafe/Coerce.hi
new file mode 100644
Binary files /dev/null and b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Unsafe/Coerce.hi differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/include/CTypes.h b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/include/CTypes.h
new file mode 100644
--- /dev/null
+++ b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/include/CTypes.h
@@ -0,0 +1,231 @@
+{- --------------------------------------------------------------------------
+// Dirty CPP hackery for CTypes/CTypesISO
+//
+// (c) The FFI task force, 2000
+// --------------------------------------------------------------------------
+-}
+
+#ifndef CTYPES__H
+#define CTYPES__H
+
+#include "Typeable.h"
+
+{-
+// As long as there is no automatic derivation of classes for newtypes we resort
+// to extremely dirty cpp-hackery.   :-P   Some care has to be taken when the
+// macros below are modified, otherwise the layout rule will bite you.
+-}
+
+--  // A hacked version for GHC follows the Haskell 98 version...
+#ifndef __GLASGOW_HASKELL__
+
+#define NEWTYPE_TYPE_NODERIVING(T,B) \
+newtype T = T B ; 
+
+#define NEWTYPE_TYPE(T,B) \
+newtype T = T B deriving (Eq, Ord) ; 
+
+#define ARITHMETIC_TYPE_INSTANCES(T,C,S,B) \
+INSTANCE_NUM(T) ; \
+INSTANCE_REAL(T) ; \
+INSTANCE_READ(T,B) ; \
+INSTANCE_SHOW(T,B) ; \
+INSTANCE_ENUM(T) ; \
+INSTANCE_STORABLE(T) ; \
+INSTANCE_TYPEABLE0(T,C,S) ;
+
+#define INTEGRAL_TYPE_INSTANCES(T,C,S,B) \
+INSTANCE_BOUNDED(T) ; \
+INSTANCE_INTEGRAL(T) ; \
+INSTANCE_BITS(T)
+
+#define ARITHMETIC_TYPE(T,C,S,B) \
+NEWTYPE_TYPE(T,B) ; \
+ARITHMETIC_TYPE_INSTANCES(T,C,S,B) ;
+
+#define INTEGRAL_TYPE(T,C,S,B) \
+ARITHMETIC_TYPE(T,C,S,B) ; \
+INTEGRAL_TYPE_INSTANCES(T,C,S,B)
+
+#define FLOATING_TYPE(T,C,S,B) \
+ARITHMETIC_TYPE(T,C,S,B) ; \
+INSTANCE_FRACTIONAL(T) ; \
+INSTANCE_FLOATING(T) ; \
+INSTANCE_REALFRAC(T) ; \
+INSTANCE_REALFLOAT(T)
+
+#ifndef __GLASGOW_HASKELL__
+#define fakeMap map
+#endif
+
+#define INSTANCE_READ(T,B) \
+instance Read T where { \
+   readsPrec p s = fakeMap (\(x, t) -> (T x, t)) (readsPrec p s) }
+
+#define INSTANCE_SHOW(T,B) \
+instance Show T where { \
+   showsPrec p (T x) = showsPrec p x }
+
+#define INSTANCE_NUM(T) \
+instance Num T where { \
+   (T i) + (T j) = T (i + j) ; \
+   (T i) - (T j) = T (i - j) ; \
+   (T i) * (T j) = T (i * j) ; \
+   negate  (T i) = T (negate i) ; \
+   abs     (T i) = T (abs    i) ; \
+   signum  (T i) = T (signum i) ; \
+   fromInteger x = T (fromInteger x) }
+
+#define INSTANCE_EQ(T) \
+instance Eq T where { \
+   (T x1) == (T x2) = x1 == x2 }
+
+#define INSTANCE_ORD(T) \
+instance Ord T where { \
+   (T x1) `compare` (T x2) = x1 `compare` x2 }
+
+#define INSTANCE_BOUNDED(T) \
+instance Bounded T where { \
+   minBound = T minBound ; \
+   maxBound = T maxBound }
+
+#define INSTANCE_ENUM(T) \
+instance Enum T where { \
+   succ           (T i)             = T (succ i) ; \
+   pred           (T i)             = T (pred i) ; \
+   toEnum               x           = T (toEnum x) ; \
+   fromEnum       (T i)             = fromEnum i ; \
+   enumFrom       (T i)             = fakeMap T (enumFrom i) ; \
+   enumFromThen   (T i) (T j)       = fakeMap T (enumFromThen i j) ; \
+   enumFromTo     (T i) (T j)       = fakeMap T (enumFromTo i j) ; \
+   enumFromThenTo (T i) (T j) (T k) = fakeMap T (enumFromThenTo i j k) }
+
+#define INSTANCE_REAL(T) \
+instance Real T where { \
+   toRational (T i) = toRational i }
+
+#define INSTANCE_INTEGRAL(T) \
+instance Integral T where { \
+   (T i) `quot`    (T j) = T (i `quot` j) ; \
+   (T i) `rem`     (T j) = T (i `rem`  j) ; \
+   (T i) `div`     (T j) = T (i `div`  j) ; \
+   (T i) `mod`     (T j) = T (i `mod`  j) ; \
+   (T i) `quotRem` (T j) = let (q,r) = i `quotRem` j in (T q, T r) ; \
+   (T i) `divMod`  (T j) = let (d,m) = i `divMod`  j in (T d, T m) ; \
+   toInteger (T i)       = toInteger i }
+
+#define INSTANCE_BITS(T) \
+instance Bits T where { \
+  (T x) .&.     (T y)   = T (x .&.   y) ; \
+  (T x) .|.     (T y)   = T (x .|.   y) ; \
+  (T x) `xor`   (T y)   = T (x `xor` y) ; \
+  complement    (T x)   = T (complement x) ; \
+  shift         (T x) n = T (shift x n) ; \
+  rotate        (T x) n = T (rotate x n) ; \
+  bit                 n = T (bit n) ; \
+  setBit        (T x) n = T (setBit x n) ; \
+  clearBit      (T x) n = T (clearBit x n) ; \
+  complementBit (T x) n = T (complementBit x n) ; \
+  testBit       (T x) n = testBit x n ; \
+  bitSize       (T x)   = bitSize x ; \
+  isSigned      (T x)   = isSigned x }
+
+#define INSTANCE_FRACTIONAL(T) \
+instance Fractional T where { \
+   (T x) / (T y)  = T (x / y) ; \
+   recip   (T x)  = T (recip x) ; \
+   fromRational r = T (fromRational r) }
+
+#define INSTANCE_FLOATING(T) \
+instance Floating T where { \
+   pi                    = pi ; \
+   exp   (T x)           = T (exp   x) ; \
+   log   (T x)           = T (log   x) ; \
+   sqrt  (T x)           = T (sqrt  x) ; \
+   (T x) **        (T y) = T (x ** y) ; \
+   (T x) `logBase` (T y) = T (x `logBase` y) ; \
+   sin   (T x)           = T (sin   x) ; \
+   cos   (T x)           = T (cos   x) ; \
+   tan   (T x)           = T (tan   x) ; \
+   asin  (T x)           = T (asin  x) ; \
+   acos  (T x)           = T (acos  x) ; \
+   atan  (T x)           = T (atan  x) ; \
+   sinh  (T x)           = T (sinh  x) ; \
+   cosh  (T x)           = T (cosh  x) ; \
+   tanh  (T x)           = T (tanh  x) ; \
+   asinh (T x)           = T (asinh x) ; \
+   acosh (T x)           = T (acosh x) ; \
+   atanh (T x)           = T (atanh x) }
+
+#define INSTANCE_REALFRAC(T) \
+instance RealFrac T where { \
+   properFraction (T x) = let (m,y) = properFraction x in (m, T y) ; \
+   truncate (T x) = truncate x ; \
+   round    (T x) = round x ; \
+   ceiling  (T x) = ceiling x ; \
+   floor    (T x) = floor x }
+
+#define INSTANCE_REALFLOAT(T) \
+instance RealFloat T where { \
+   floatRadix     (T x) = floatRadix x ; \
+   floatDigits    (T x) = floatDigits x ; \
+   floatRange     (T x) = floatRange x ; \
+   decodeFloat    (T x) = decodeFloat x ; \
+   encodeFloat m n      = T (encodeFloat m n) ; \
+   exponent       (T x) = exponent x ; \
+   significand    (T x) = T (significand  x) ; \
+   scaleFloat n   (T x) = T (scaleFloat n x) ; \
+   isNaN          (T x) = isNaN x ; \
+   isInfinite     (T x) = isInfinite x ; \
+   isDenormalized (T x) = isDenormalized x ; \
+   isNegativeZero (T x) = isNegativeZero x ; \
+   isIEEE         (T x) = isIEEE x ; \
+   (T x) `atan2`  (T y) = T (x `atan2` y) }
+
+#define INSTANCE_STORABLE(T) \
+instance Storable T where { \
+   sizeOf    (T x)       = sizeOf x ; \
+   alignment (T x)       = alignment x ; \
+   peekElemOff a i       = liftM T (peekElemOff (castPtr a) i) ; \
+   pokeElemOff a i (T x) = pokeElemOff (castPtr a) i x }
+
+#else /* __GLASGOW_HASKELL__ */
+
+--  // GHC can derive any class for a newtype, so we make use of that here...
+
+#define ARITHMETIC_CLASSES  Eq,Ord,Num,Enum,Storable,Real
+#define INTEGRAL_CLASSES Bounded,Integral,Bits
+#define FLOATING_CLASSES Fractional,Floating,RealFrac,RealFloat
+
+#define ARITHMETIC_TYPE(T,C,S,B) \
+newtype T = T B deriving (ARITHMETIC_CLASSES); \
+INSTANCE_READ(T,B); \
+INSTANCE_SHOW(T,B); \
+INSTANCE_TYPEABLE0(T,C,S) ;
+
+#define INTEGRAL_TYPE(T,C,S,B) \
+newtype T = T B deriving (ARITHMETIC_CLASSES, INTEGRAL_CLASSES); \
+INSTANCE_READ(T,B); \
+INSTANCE_SHOW(T,B); \
+INSTANCE_TYPEABLE0(T,C,S) ;
+
+#define FLOATING_TYPE(T,C,S,B) \
+newtype T = T B deriving (ARITHMETIC_CLASSES, FLOATING_CLASSES); \
+INSTANCE_READ(T,B); \
+INSTANCE_SHOW(T,B); \
+INSTANCE_TYPEABLE0(T,C,S) ;
+
+#define INSTANCE_READ(T,B) \
+instance Read T where { \
+   readsPrec            = unsafeCoerce# (readsPrec :: Int -> ReadS B); \
+   readList             = unsafeCoerce# (readList  :: ReadS [B]); }
+
+#define INSTANCE_SHOW(T,B) \
+instance Show T where { \
+   showsPrec            = unsafeCoerce# (showsPrec :: Int -> B -> ShowS); \
+   show                 = unsafeCoerce# (show :: B -> String); \
+   showList             = unsafeCoerce# (showList :: [B] -> ShowS); }
+
+#endif /* __GLASGOW_HASKELL__ */
+
+#endif
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/include/HsBase.h b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/include/HsBase.h
new file mode 100644
--- /dev/null
+++ b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/include/HsBase.h
@@ -0,0 +1,757 @@
+/* -----------------------------------------------------------------------------
+ *
+ * (c) The University of Glasgow 2001-2004
+ *
+ * Definitions for package `base' which are visible in Haskell land.
+ *
+ * Adapted for use in EHC
+ *
+ * ---------------------------------------------------------------------------*/
+
+#ifndef __HSBASE_H__
+#define __HSBASE_H__
+
+#include "HsBaseConfig.h"
+#ifdef __UHC_BUILDS_O__
+#include "rts.h"
+#endif
+
+/* ultra-evil... */
+#undef PACKAGE_BUGREPORT
+#undef PACKAGE_NAME
+#undef PACKAGE_STRING
+#undef PACKAGE_TARNAME
+#undef PACKAGE_VERSION
+
+/* Needed to get the macro version of errno on some OSs (eg. Solaris).
+   We must do this, because these libs are only compiled once, but
+   must work in both single-threaded and multi-threaded programs. */
+#define _REENTRANT 1
+
+#ifndef __UHC__
+#include "HsFFI.h"
+#endif /* !__UHC__ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#if HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#if HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#if HAVE_FCNTL_H
+# include <fcntl.h>
+#endif
+#if HAVE_TERMIOS_H
+#include <termios.h>
+#endif
+#if HAVE_SIGNAL_H
+#include <signal.h>
+/* Ultra-ugly: OpenBSD uses broken macros for sigemptyset and sigfillset (missing casts) */
+#if __OpenBSD__
+#undef sigemptyset
+#undef sigfillset
+#endif
+#endif
+#if HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#if HAVE_STRING_H
+#include <string.h>
+#endif
+#if HAVE_DIRENT_H
+#include <dirent.h>
+#endif
+#if HAVE_UTIME_H
+#include <utime.h>
+#endif
+#if HAVE_SYS_UTSNAME_H
+#include <sys/utsname.h>
+#endif
+#if HAVE_GETTIMEOFDAY
+#  if HAVE_SYS_TIME_H
+#   include <sys/time.h>
+#  endif
+#elif HAVE_GETCLOCK
+# if HAVE_SYS_TIMERS_H
+#  define POSIX_4D9 1
+#  include <sys/timers.h>
+# endif
+#endif
+#if HAVE_TIME_H
+#include <time.h>
+#endif
+#if HAVE_SYS_TIMEB_H
+#include <sys/timeb.h>
+#endif
+#if HAVE_WINDOWS_H
+#include <windows.h>
+#endif
+#if HAVE_SYS_TIMES_H
+#include <sys/times.h>
+#endif
+#if HAVE_WINSOCK_H && defined(__MINGW32__)
+#include <winsock.h>
+#endif
+#if HAVE_LIMITS_H
+#include <limits.h>
+#endif
+#if HAVE_WCTYPE_H
+#include <wctype.h>
+#endif
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#elif HAVE_STDINT_H
+# include <stdint.h>
+#endif
+
+#if !defined(__MINGW32__) && !defined(irix_HOST_OS)
+# if HAVE_SYS_RESOURCE_H
+#  include <sys/resource.h>
+# endif
+#endif
+
+#if !HAVE_GETRUSAGE && HAVE_SYS_SYSCALL_H
+# include <sys/syscall.h>
+# if defined(SYS_GETRUSAGE)	/* hpux_HOST_OS */
+#  define getrusage(a, b)  syscall(SYS_GETRUSAGE, a, b)
+#  define HAVE_GETRUSAGE 1
+# endif
+#endif
+
+/* For System */
+#if HAVE_SYS_WAIT_H
+#include <sys/wait.h>
+#endif
+#if HAVE_VFORK_H
+#include <vfork.h>
+#endif
+
+#ifndef __UHC__
+#include "dirUtils.h"
+#endif
+#ifndef __UHC__
+#include "WCsubst.h"
+#endif /* !__UHC__ */
+
+#if defined(__MINGW32__)
+/* in Win32Utils.c */
+extern void maperrno (void);
+extern HsWord64 getUSecOfDay(void);
+#endif
+
+#if defined(__MINGW32__)
+#include <io.h>
+#include <fcntl.h>
+#include <shlobj.h>
+#include <share.h>
+#endif
+
+#if HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif
+
+/* in inputReady.c */
+extern int fdReady(int fd, int write, int msecs, int isSock);
+
+#ifndef __UHC__
+/* in Signals.c */
+extern HsInt nocldstop;
+#endif /* !__UHC__ */
+
+#ifndef __UHC__
+/* -----------------------------------------------------------------------------
+   64-bit operations, defined in longlong.c
+   -------------------------------------------------------------------------- */
+
+#ifdef SUPPORT_LONG_LONGS
+
+HsBool hs_gtWord64 (HsWord64, HsWord64);
+HsBool hs_geWord64 (HsWord64, HsWord64);
+HsBool hs_eqWord64 (HsWord64, HsWord64);
+HsBool hs_neWord64 (HsWord64, HsWord64);
+HsBool hs_ltWord64 (HsWord64, HsWord64);
+HsBool hs_leWord64 (HsWord64, HsWord64);
+
+HsBool hs_gtInt64 (HsInt64, HsInt64);
+HsBool hs_geInt64 (HsInt64, HsInt64);
+HsBool hs_eqInt64 (HsInt64, HsInt64);
+HsBool hs_neInt64 (HsInt64, HsInt64);
+HsBool hs_ltInt64 (HsInt64, HsInt64);
+HsBool hs_leInt64 (HsInt64, HsInt64);
+
+HsWord64 hs_remWord64  (HsWord64, HsWord64);
+HsWord64 hs_quotWord64 (HsWord64, HsWord64);
+
+HsInt64 hs_remInt64    (HsInt64, HsInt64);
+HsInt64 hs_quotInt64   (HsInt64, HsInt64);
+HsInt64 hs_negateInt64 (HsInt64);
+HsInt64 hs_plusInt64   (HsInt64, HsInt64);
+HsInt64 hs_minusInt64  (HsInt64, HsInt64);
+HsInt64 hs_timesInt64  (HsInt64, HsInt64);
+
+HsWord64 hs_and64  (HsWord64, HsWord64);
+HsWord64 hs_or64   (HsWord64, HsWord64);
+HsWord64 hs_xor64  (HsWord64, HsWord64);
+HsWord64 hs_not64  (HsWord64);
+
+HsWord64 hs_uncheckedShiftL64   (HsWord64, HsInt);
+HsWord64 hs_uncheckedShiftRL64  (HsWord64, HsInt);
+HsInt64  hs_uncheckedIShiftL64  (HsInt64, HsInt);
+HsInt64  hs_uncheckedIShiftRA64 (HsInt64, HsInt);
+HsInt64  hs_uncheckedIShiftRL64 (HsInt64, HsInt);
+
+HsInt64  hs_intToInt64    (HsInt);
+HsInt    hs_int64ToInt    (HsInt64);
+HsWord64 hs_int64ToWord64 (HsInt64);
+HsWord64 hs_wordToWord64  (HsWord);
+HsWord   hs_word64ToWord  (HsWord64);
+HsInt64  hs_word64ToInt64 (HsWord64);
+
+HsWord64 hs_integerToWord64 (HsInt sa, StgByteArray /* Really: mp_limb_t* */ da);
+HsInt64  hs_integerToInt64 (HsInt sa, StgByteArray /* Really: mp_limb_t* */ da);
+
+#endif /* SUPPORT_LONG_LONGS */
+#endif /* !__UHC__ */
+
+/* -----------------------------------------------------------------------------
+   INLINE functions.
+
+   These functions are given as inlines here for when compiling via C,
+   but we also generate static versions into the cbits library for
+   when compiling to native code.
+   -------------------------------------------------------------------------- */
+
+#ifndef INLINE
+# if defined(_MSC_VER)
+#  define INLINE extern __inline
+# else
+#  define INLINE static inline
+# endif
+#endif
+
+INLINE int __hscore_get_errno(void) { return errno; }
+INLINE void __hscore_set_errno(int e) { errno = e; }
+
+#if !defined(_MSC_VER)
+INLINE int __hscore_s_isreg(mode_t m)  { return S_ISREG(m);  }
+INLINE int __hscore_s_isdir(mode_t m)  { return S_ISDIR(m);  }
+INLINE int __hscore_s_isfifo(mode_t m) { return S_ISFIFO(m); }
+INLINE int __hscore_s_isblk(mode_t m)  { return S_ISBLK(m);  }
+INLINE int __hscore_s_ischr(mode_t m)  { return S_ISCHR(m);  }
+#if !defined(mingw32_HOST_OS) && !defined(__MINGW32__)
+INLINE int __hscore_s_issock(mode_t m) { return S_ISSOCK(m); }
+#endif
+#endif
+
+#if ( !defined(_MSC_VER) && !defined(__MINGW32__) && !defined(_WIN32) ) || defined(__CYGWIN__)
+INLINE int
+__hscore_sigemptyset( sigset_t *set )
+{ return sigemptyset(set); }
+
+INLINE int
+__hscore_sigfillset( sigset_t *set )
+{ return sigfillset(set); }
+
+INLINE int
+__hscore_sigaddset( sigset_t * set, int s )
+{ return sigaddset(set,s); }
+
+INLINE int
+__hscore_sigdelset( sigset_t * set, int s )
+{ return sigdelset(set,s); }
+
+INLINE int
+__hscore_sigismember( sigset_t * set, int s )
+{ return sigismember(set,s); }
+#endif
+
+INLINE void *
+__hscore_memcpy_dst_off( char *dst, int dst_off, char *src, size_t sz )
+{ return memcpy(dst+dst_off, src, sz); }
+
+INLINE void *
+__hscore_memcpy_src_off( char *dst, char *src, int src_off, size_t sz )
+{ return memcpy(dst, src+src_off, sz); }
+
+INLINE HsBool
+__hscore_supportsTextMode()
+{
+#if defined(_MSC_VER) || defined(__MINGW32__) || defined(_WIN32)
+  return HS_BOOL_FALSE;
+#else
+  return HS_BOOL_TRUE;
+#endif
+}
+
+INLINE HsInt
+__hscore_bufsiz()
+{
+  return BUFSIZ;
+}
+
+INLINE int
+__hscore_seek_cur()
+{
+  return SEEK_CUR;
+}
+
+INLINE int
+__hscore_o_binary()
+{
+#if defined(_MSC_VER)
+  return O_BINARY;
+#else
+  return CONST_O_BINARY;
+#endif
+}
+
+INLINE int
+__hscore_o_rdonly()
+{
+#ifdef O_RDONLY
+  return O_RDONLY;
+#else
+  return 0;
+#endif
+}
+
+INLINE int
+__hscore_o_wronly( void )
+{
+#ifdef O_WRONLY
+  return O_WRONLY;
+#else
+  return 0;
+#endif
+}
+
+INLINE int
+__hscore_o_rdwr( void )
+{
+#ifdef O_RDWR
+  return O_RDWR;
+#else
+  return 0;
+#endif
+}
+
+INLINE int
+__hscore_o_append( void )
+{
+#ifdef O_APPEND
+  return O_APPEND;
+#else
+  return 0;
+#endif
+}
+
+INLINE int
+__hscore_o_creat( void )
+{
+#ifdef O_CREAT
+  return O_CREAT;
+#else
+  return 0;
+#endif
+}
+
+INLINE int
+__hscore_o_excl( void )
+{
+#ifdef O_EXCL
+  return O_EXCL;
+#else
+  return 0;
+#endif
+}
+
+INLINE int
+__hscore_o_trunc( void )
+{
+#ifdef O_TRUNC
+  return O_TRUNC;
+#else
+  return 0;
+#endif
+}
+
+INLINE int
+__hscore_o_noctty( void )
+{
+#ifdef O_NOCTTY
+  return O_NOCTTY;
+#else
+  return 0;
+#endif
+}
+
+INLINE int
+__hscore_o_nonblock( void )
+{
+#ifdef O_NONBLOCK
+  return O_NONBLOCK;
+#else
+  return 0;
+#endif
+}
+
+INLINE int
+__hscore_seek_set( void )
+{
+  return SEEK_SET;
+}
+
+INLINE int
+__hscore_seek_end( void )
+{
+  return SEEK_END;
+}
+
+INLINE int
+__hscore_ftruncate( int fd, off_t where )
+{
+#if defined(HAVE_FTRUNCATE)
+  return ftruncate(fd,where);
+#elif defined(HAVE__CHSIZE)
+  return _chsize(fd,where);
+#else
+// ToDo: we should use _chsize_s() on Windows which allows a 64-bit
+// offset, but it doesn't seem to be available from mingw at this time 
+// --SDM (01/2008)
+#error at least ftruncate or _chsize functions are required to build
+#endif
+}
+
+#ifndef __UHC__
+INLINE int
+__hscore_setmode( int fd, HsBool toBin )
+{
+#if defined(_MSC_VER) || defined(__MINGW32__) || defined(_WIN32)
+  return setmode(fd,(toBin == HS_BOOL_TRUE) ? _O_BINARY : _O_TEXT);
+#else
+  return 0;
+#endif
+}
+#endif /* !__UHC__ */
+
+#if __GLASGOW_HASKELL__
+
+INLINE int
+__hscore_PrelHandle_write( int fd, void *ptr, HsInt off, int sz )
+{
+  return write(fd,(char *)ptr + off, sz);
+}
+
+INLINE int
+__hscore_PrelHandle_read( int fd, void *ptr, HsInt off, int sz )
+{
+  return read(fd,(char *)ptr + off, sz);
+
+}
+
+#if defined(_MSC_VER) || defined(__MINGW32__) || defined(_WIN32)
+INLINE int
+__hscore_PrelHandle_send( int fd, void *ptr, HsInt off, int sz )
+{
+    return send(fd,(char *)ptr + off, sz, 0);
+}
+
+INLINE int
+__hscore_PrelHandle_recv( int fd, void *ptr, HsInt off, int sz )
+{
+    return recv(fd,(char *)ptr + off, sz, 0);
+}
+#endif
+
+#endif /* __GLASGOW_HASKELL__ */
+
+INLINE int
+__hscore_mkdir( char *pathName, int mode )
+{
+#if ( defined(_MSC_VER) || defined(__MINGW32__) || defined(_WIN32) ) && !defined(__CYGWIN__)
+  return mkdir(pathName);
+#else
+  return mkdir(pathName,mode);
+#endif
+}
+
+INLINE int
+__hscore_lstat( const char *fname, struct stat *st )
+{
+#if HAVE_LSTAT
+  return lstat(fname, st);
+#else
+  return stat(fname, st);
+#endif
+}
+
+INLINE char *
+__hscore_d_name( struct dirent* d )
+{
+  return (d->d_name);
+}
+
+INLINE int
+__hscore_end_of_dir( void )
+{
+  return READDIR_ERRNO_EOF;
+}
+
+INLINE void
+__hscore_free_dirent(struct dirent *dEnt)
+{
+#if HAVE_READDIR_R
+  free(dEnt);
+#endif
+}
+
+#if defined(__MINGW32__)
+// We want the versions of stat/fstat/lseek that use 64-bit offsets,
+// and you have to ask for those explicitly.  Unfortunately there
+// doesn't seem to be a 64-bit version of truncate/ftruncate, so while
+// hFileSize and hSeek will work with large files, hSetFileSize will not.
+#define stat(file,buf)       _stati64(file,buf)
+#define fstat(fd,buf)        _fstati64(fd,buf)
+typedef struct _stati64 struct_stat;
+typedef off64_t stsize_t;
+#else
+typedef struct stat struct_stat;
+typedef off_t stsize_t;
+#endif
+
+INLINE HsInt
+__hscore_sizeof_stat( void )
+{
+  return sizeof(struct_stat);
+}
+
+INLINE time_t __hscore_st_mtime ( struct_stat* st ) { return st->st_mtime; }
+INLINE stsize_t __hscore_st_size  ( struct_stat* st ) { return st->st_size; }
+#if !defined(_MSC_VER)
+INLINE mode_t __hscore_st_mode  ( struct_stat* st ) { return st->st_mode; }
+INLINE dev_t  __hscore_st_dev  ( struct_stat* st ) { return st->st_dev; }
+INLINE ino_t  __hscore_st_ino  ( struct_stat* st ) { return st->st_ino; }
+#endif
+
+#if HAVE_TERMIOS_H
+INLINE tcflag_t __hscore_lflag( struct termios* ts ) { return ts->c_lflag; }
+
+INLINE void
+__hscore_poke_lflag( struct termios* ts, tcflag_t t ) { ts->c_lflag = t; }
+
+INLINE unsigned char*
+__hscore_ptr_c_cc( struct termios* ts )
+{ return (unsigned char*) &ts->c_cc; }
+
+INLINE HsInt
+__hscore_sizeof_termios( void )
+{
+#ifndef __MINGW32__
+  return sizeof(struct termios);
+#else
+  return 0;
+#endif
+}
+#endif
+
+//sizeof_sigset_t is also use on windows systems which define tcflat_t. Why exclude it?
+// #if !defined(_MSC_VER) && !defined(__MINGW32__) && !defined(_WIN32)
+INLINE HsInt
+__hscore_sizeof_sigset_t( void )
+{
+  return sizeof(sigset_t);
+}
+// #endif
+
+INLINE int
+__hscore_echo( void )
+{
+#ifdef ECHO
+  return ECHO;
+#else
+  return 0;
+#endif
+
+}
+
+INLINE int
+__hscore_tcsanow( void )
+{
+#ifdef TCSANOW
+  return TCSANOW;
+#else
+  return 0;
+#endif
+
+}
+
+INLINE int
+__hscore_icanon( void )
+{
+#ifdef ICANON
+  return ICANON;
+#else
+  return 0;
+#endif
+}
+
+INLINE int __hscore_vmin( void )
+{
+#ifdef VMIN
+  return VMIN;
+#else
+  return 0;
+#endif
+}
+
+INLINE int __hscore_vtime( void )
+{
+#ifdef VTIME
+  return VTIME;
+#else
+  return 0;
+#endif
+}
+
+INLINE int __hscore_sigttou( void )
+{
+#ifdef SIGTTOU
+  return SIGTTOU;
+#else
+  return 0;
+#endif
+}
+
+INLINE int __hscore_sig_block( void )
+{
+#ifdef SIG_BLOCK
+  return SIG_BLOCK;
+#else
+  return 0;
+#endif
+}
+
+INLINE int __hscore_sig_setmask( void )
+{
+#ifdef SIG_SETMASK
+  return SIG_SETMASK;
+#else
+  return 0;
+#endif
+}
+
+INLINE int
+__hscore_f_getfl( void )
+{
+#ifdef F_GETFL
+  return F_GETFL;
+#else
+  return 0;
+#endif
+}
+
+INLINE int
+__hscore_f_setfl( void )
+{
+#ifdef F_SETFL
+  return F_SETFL;
+#else
+  return 0;
+#endif
+}
+
+// defined in rts/RtsStartup.c.
+extern void* __hscore_get_saved_termios(int fd);
+extern void __hscore_set_saved_termios(int fd, void* ts);
+
+INLINE int __hscore_hs_fileno (FILE *f) { return fileno (f); }
+
+INLINE int __hscore_open(char *file, int how, mode_t mode) {
+#ifdef __MINGW32__
+	if ((how & O_WRONLY) || (how & O_RDWR) || (how & O_APPEND))
+	  return _sopen(file,how,_SH_DENYRW,mode);
+	else
+	  return _sopen(file,how,_SH_DENYWR,mode);
+#else
+	return open(file,how,mode);
+#endif
+}
+
+// These are wrapped because on some OSs (eg. Linux) they are
+// macros which redirect to the 64-bit-off_t versions when large file
+// support is enabled.
+//
+#if defined(__MINGW32__)
+INLINE off64_t __hscore_lseek(int fd, off64_t off, int whence) {
+	return (_lseeki64(fd,off,whence));
+}
+#else
+INLINE off_t __hscore_lseek(int fd, off_t off, int whence) {
+	return (lseek(fd,off,whence));
+}
+#endif
+
+INLINE HsInt __hscore_stat(char *file, struct_stat *buf) {
+	return (stat(file,buf));
+}
+
+INLINE HsInt __hscore_fstat(int fd, struct_stat *buf) {
+	return (fstat(fd,buf));
+}
+
+// select-related stuff
+
+#if !defined(__MINGW32__)
+INLINE int  hsFD_SETSIZE(void) { return FD_SETSIZE; }
+INLINE int  hsFD_ISSET(int fd, fd_set *fds) { return FD_ISSET(fd, fds); }
+INLINE void hsFD_SET(int fd, fd_set *fds) { FD_SET(fd, fds); }
+INLINE HsInt sizeof_fd_set(void) { return sizeof(fd_set); }
+extern void hsFD_ZERO(fd_set *fds);
+#endif
+
+// gettimeofday()-related
+
+#if !defined(__MINGW32__)
+
+INLINE HsInt sizeofTimeVal(void) { return sizeof(struct timeval); }
+
+INLINE HsWord64 getUSecOfDay(void)
+{
+    struct timeval tv;
+    gettimeofday(&tv, (struct timezone *) NULL);
+    // Don't forget to cast *before* doing the arithmetic, otherwise
+    // the arithmetic happens at the type of tv_sec, which is probably
+    // only 'int'.
+    return ((HsWord64)tv.tv_sec * 1000000 + (HsWord64)tv.tv_usec);
+}
+
+INLINE void setTimevalTicks(struct timeval *p, HsWord64 usecs)
+{
+    p->tv_sec  = usecs / 1000000;
+    p->tv_usec = usecs % 1000000;
+}
+#endif /* !defined(__MINGW32__) */
+
+/* ToDo: write a feature test that doesn't assume 'environ' to
+ *    be in scope at link-time. */
+extern char** environ;
+INLINE char **__hscore_environ() { return environ; }
+
+/* lossless conversions between pointers and integral types */
+INLINE void *    __hscore_from_uintptr(uintptr_t n) { return (void *)n; }
+INLINE void *    __hscore_from_intptr (intptr_t n)  { return (void *)n; }
+INLINE uintptr_t __hscore_to_uintptr  (void *p)     { return (uintptr_t)p; }
+INLINE intptr_t  __hscore_to_intptr   (void *p)     { return (intptr_t)p; }
+
+void errorBelch2(const char*s, char *t);
+void debugBelch2(const char*s, char *t);
+
+#endif /* __HSBASE_H__ */
+
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/include/HsBaseConfig.h b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/include/HsBaseConfig.h
new file mode 100644
--- /dev/null
+++ b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/include/HsBaseConfig.h
@@ -0,0 +1,944 @@
+/* ehclib/uhcbase/include/HsBaseConfig.h.  Generated from HsBaseConfig.h.in by configure.  */
+#ifndef HSBASECONFIG_H
+#define HSBASECONFIG_H
+
+#include "MachDeps.h"
+
+/********************************************************************/
+/**** Sizes                                                      ****/
+/********************************************************************/
+
+#if SIZEOF_INTPTR_T == 8
+#define HTYPE_INTPTR_T 			Int64
+#define HTYPE_UINTPTR_T 		Word64
+#else
+#define HTYPE_INTPTR_T 			Int32
+#define HTYPE_UINTPTR_T 		Word32
+#endif
+
+/* also here: typedef int sig_atomic_t
+ */
+#if SIZEOF_INT == 8
+#define HTYPE_INT 				Int64
+#define HTYPE_UNSIGNED_INT 		Word64
+#define HTYPE_SIG_ATOMIC_T 		Word64
+#else
+#define HTYPE_INT 				Int32
+#define HTYPE_UNSIGNED_INT 		Word32
+#define HTYPE_SIG_ATOMIC_T 		Word32
+#endif
+
+#if SIZEOF_LONG == 8
+#define HTYPE_LONG 				Int64
+#define HTYPE_UNSIGNED_LONG 	Word64
+#else
+#define HTYPE_LONG 				Int32
+#define HTYPE_UNSIGNED_LONG 	Word32
+#endif
+
+#if SIZEOF_VOID_P == 8
+#define HTYPE_PTRDIFF_T 		Int64
+#else
+#define HTYPE_PTRDIFF_T 		Int32
+#endif
+
+#if SIZEOF_CLOCK_T == 8
+#define HTYPE_CLOCK_T 			Word64
+#else
+#define HTYPE_CLOCK_T 			Word32
+#endif
+
+#if SIZEOF_TIME_T == 8
+#define HTYPE_TIME_T 			Word64
+#else
+#define HTYPE_TIME_T 			Word32
+#endif
+
+#if SIZEOF_USECONDS_T == 8
+#define HTYPE_USECONDS_T 		Word64
+#else
+#define HTYPE_USECONDS_T 		Word32
+#endif
+
+#if SIZEOF_SIZE_T == 8
+#define HTYPE_SIZE_T 			Word64
+#else
+#define HTYPE_SIZE_T 			Word32
+#endif
+
+#if SIZEOF_WCHAR_T == 1
+#define HTYPE_WCHAR_T 			Word8
+#elif SIZEOF_WCHAR_T == 2
+#define HTYPE_WCHAR_T 			Word16
+#else
+#define HTYPE_WCHAR_T 			Word32
+#endif
+
+
+
+/* Define to Haskell type for char */
+#define HTYPE_CHAR Int8
+
+/* Define to Haskell type for double */
+#define HTYPE_DOUBLE Double
+
+/* Define to Haskell type for float */
+#define HTYPE_FLOAT Float
+
+/* Define to Haskell type for intmax_t */
+#define HTYPE_INTMAX_T Int64
+
+/* Define to Haskell type for long long */
+#define HTYPE_LONG_LONG Int64
+
+/* Define to Haskell type for short */
+#define HTYPE_SHORT Int16
+
+/* Define to Haskell type for signed char */
+#define HTYPE_SIGNED_CHAR Int8
+
+/* Define to Haskell type for uintmax_t */
+#define HTYPE_UINTMAX_T Word64
+
+/* Define to Haskell type for unsigned char */
+#define HTYPE_UNSIGNED_CHAR Word8
+
+/* Define to Haskell type for unsigned long long */
+#define HTYPE_UNSIGNED_LONG_LONG Word64
+
+/* Define to Haskell type for unsigned short */
+#define HTYPE_UNSIGNED_SHORT Word16
+
+
+
+/********************************************************************/
+/**** System tupes                                               ****/
+/********************************************************************/
+
+#ifdef SIZEOF_DEV_T
+# if SIZEOF_DEV_T == 8
+#  define HTYPE_DEV_T 			Word64
+# elif SIZEOF_DEV_T == 4
+#  define HTYPE_DEV_T 			Word32
+# elif SIZEOF_DEV_T == 2
+#  define HTYPE_DEV_T 			Word16
+# else
+# endif
+#endif
+
+#ifdef SIZEOF_INO_T
+# if SIZEOF_INO_T == 8
+#  define HTYPE_INO_T 			Word64
+# elif SIZEOF_INO_T == 4
+#  define HTYPE_INO_T 			Word32
+# elif SIZEOF_INO_T == 2
+#  define HTYPE_INO_T 			Word16
+# else
+# endif
+#endif
+
+#ifdef SIZEOF_MODE_T
+# if SIZEOF_MODE_T == 8
+#  define HTYPE_MODE_T 			Word64
+# elif SIZEOF_MODE_T == 4
+#  define HTYPE_MODE_T 			Word32
+# elif SIZEOF_MODE_T == 2
+#  define HTYPE_MODE_T 			Word16
+# else
+# endif
+#endif
+
+#ifdef SIZEOF_OFF_T
+# if SIZEOF_OFF_T == 8
+#  define HTYPE_OFF_T 			Word64
+# elif SIZEOF_OFF_T == 4
+#  define HTYPE_OFF_T 			Word32
+# elif SIZEOF_OFF_T == 2
+#  define HTYPE_OFF_T 			Word16
+# else
+# endif
+#endif
+
+#ifdef SIZEOF_PID_T
+# if SIZEOF_PID_T == 8
+#  define HTYPE_PID_T 			Word64
+# elif SIZEOF_PID_T == 4
+#  define HTYPE_PID_T 			Word32
+# elif SIZEOF_PID_T == 2
+#  define HTYPE_PID_T 			Word16
+# else
+# endif
+#endif
+
+#ifdef SIZEOF_SSIZE_T
+# if SIZEOF_SSIZE_T == 8
+#  define HTYPE_SSIZE_T 			Word64
+# elif SIZEOF_SSIZE_T == 4
+#  define HTYPE_SSIZE_T 			Word32
+# elif SIZEOF_SSIZE_T == 2
+#  define HTYPE_SSIZE_T 			Word16
+# else
+# endif
+#endif
+
+#ifdef SIZEOF_GID_T
+# if SIZEOF_GID_T == 8
+#  define HTYPE_GID_T 			Word64
+# elif SIZEOF_GID_T == 4
+#  define HTYPE_GID_T 			Word32
+# elif SIZEOF_GID_T == 2
+#  define HTYPE_GID_T 			Word16
+# else
+# endif
+#endif
+
+#ifdef SIZEOF_NLINK_T
+# if SIZEOF_NLINK_T == 8
+#  define HTYPE_NLINK_T 			Word64
+# elif SIZEOF_NLINK_T == 4
+#  define HTYPE_NLINK_T 			Word32
+# elif SIZEOF_NLINK_T == 2
+#  define HTYPE_NLINK_T 			Word16
+# else
+# endif
+#endif
+
+#ifdef SIZEOF_UID_T
+# if SIZEOF_UID_T == 8
+#  define HTYPE_UID_T 			Word64
+# elif SIZEOF_UID_T == 4
+#  define HTYPE_UID_T 			Word32
+# elif SIZEOF_UID_T == 2
+#  define HTYPE_UID_T 			Word16
+# else
+# endif
+#endif
+
+#ifdef SIZEOF_CC_T
+# if SIZEOF_CC_T == 8
+#  define HTYPE_CC_T 			Word64
+# elif SIZEOF_CC_T == 4
+#  define HTYPE_CC_T 			Word32
+# elif SIZEOF_CC_T == 2
+#  define HTYPE_CC_T 			Word16
+# else
+# endif
+#endif
+
+#ifdef SIZEOF_SPEED_T
+# if SIZEOF_SPEED_T == 8
+#  define HTYPE_SPEED_T 			Word64
+# elif SIZEOF_SPEED_T == 4
+#  define HTYPE_SPEED_T 			Word32
+# elif SIZEOF_SPEED_T == 2
+#  define HTYPE_SPEED_T 			Word16
+# else
+# endif
+#endif
+
+#ifdef SIZEOF_TCFLAG_T
+# if SIZEOF_TCFLAG_T == 8
+#  define HTYPE_TCFLAG_T 			Word64
+# elif SIZEOF_TCFLAG_T == 4
+#  define HTYPE_TCFLAG_T 			Word32
+# elif SIZEOF_TCFLAG_T == 2
+#  define HTYPE_TCFLAG_T 			Word16
+# else
+# endif
+#endif
+
+#ifdef SIZEOF_RLIM_T
+# if SIZEOF_RLIM_T == 8
+#  define HTYPE_RLIM_T 			Word64
+# elif SIZEOF_RLIM_T == 4
+#  define HTYPE_RLIM_T 			Word32
+# elif SIZEOF_RLIM_T == 2
+#  define HTYPE_RLIM_T 			Word16
+# else
+# endif
+#endif
+
+/********************************************************************/
+/**** Presence of include files                                  ****/
+/********************************************************************/
+
+#define HAVE_DIRENT_H 1
+#define HAVE_ERRNO_H 1
+#define HAVE_FCNTL_H 1
+#define HAVE_INTTYPES_H 1
+#define HAVE_LIMITS_H 1
+#define HAVE_SIGNAL_H 1
+#define HAVE_STDINT_H 1
+#define HAVE_STRING_H 1
+#define HAVE_SYS_RESOURCE_H 1
+#define HAVE_SYS_SELECT_H 1
+#define HAVE_SYS_STAT_H 1
+#define HAVE_SYS_SYSCALL_H 1
+#define HAVE_SYS_TIME_H 1
+#define HAVE_SYS_TIMEB_H 1
+/* #undef HAVE_SYS_TIMERS_H */
+#define HAVE_SYS_TIMES_H 1
+#define HAVE_SYS_TYPES_H 1
+#define HAVE_SYS_UTSNAME_H 1
+#define HAVE_SYS_WAIT_H 1
+#define HAVE_TERMIOS_H 1
+#define HAVE_TIME_H 1
+#define HAVE_UNISTD_H 1
+#define HAVE_UTIME_H 1
+/* #undef HAVE_VFORK_H */
+#define HAVE_WCTYPE_H 1
+/* #undef HAVE_WINDOWS_H */
+/* #undef HAVE_WINSOCK_H */
+
+/* #undef HAVE__CHSIZE */
+#define HAVE_FTRUNCATE 1
+/* #undef HAVE_GETCLOCK */
+#define HAVE_GETRUSAGE 1
+#define HAVE_GETTIMEOFDAY 1
+#define HAVE_LSTAT 1
+#define HAVE_READDIR_R 1
+
+/********************************************************************/
+/**** Runtime types                                              ****/
+/********************************************************************/
+
+#ifdef __UHC_BUILDS_O__
+
+#if defined(__UHC_TARGET_BC__) || defined(__UHC_TARGET_C__)
+// # define HsBool				Word
+// # define HsInt				Word
+// # define HsWord64			Word64
+// # define HsWord32			Word32
+// # define HsWord16			Word16
+// # define HsWord8			Word8
+// # ifdef __UHC_TARGET_BC__
+// #  define HS_BOOL_FALSE		gb_False
+// #  define HS_BOOL_TRUE		gb_True
+// # else
+// #  define HS_BOOL_FALSE		0
+// #  define HS_BOOL_TRUE		1
+// # endif
+#endif /* __UHC_TARGET_BC__ */
+
+#endif /* __UHC_BUILDS_O__ */
+
+/********************************************************************/
+/**** Read dir EOF error                                         ****/
+/********************************************************************/
+
+/* See remarks in GHC, libraries/base/aclocal.m4: MinGW platform returns non 0 value. We ignore that */
+#define	READDIR_ERRNO_EOF	0
+
+/********************************************************************/
+/**** C errors                                                   ****/
+/********************************************************************/
+
+/* (1) Assume errno.h is already included */
+/* (2) Error codes like EADV are not present on all platforms, so a dummy value is provided, this should be done for all codes */
+
+/* The value of E2BIG. */
+#if !defined(E2BIG)
+#define E2BIG 10000
+#endif
+#define CONST_E2BIG E2BIG
+
+/* The value of EACCES. */
+#if !defined(EACCES)
+#define EACCES 10000
+#endif
+#define CONST_EACCES EACCES
+
+/* The value of EADDRINUSE. */
+#if !defined(EADDRINUSE)
+#define EADDRINUSE 10000
+#endif
+#define CONST_EADDRINUSE EADDRINUSE
+
+/* The value of EADDRNOTAVAIL. */
+#define CONST_EADDRNOTAVAIL EADDRNOTAVAIL
+
+/* The value of EADV. */
+#if !defined(EADV)
+#define EADV 10000
+#endif
+#define CONST_EADV EADV
+
+/* The value of EAFNOSUPPORT. */
+#if !defined(EAFNOSUPPORT)
+#define EAFNOSUPPORT 10000
+#endif
+#define CONST_EAFNOSUPPORT EAFNOSUPPORT
+
+/* The value of EAGAIN. */
+#if !defined(EAGAIN)
+#define EAGAIN 10000
+#endif
+#define CONST_EAGAIN EAGAIN
+
+/* The value of EALREADY. */
+#if !defined(EALREADY)
+#define EALREADY 10000
+#endif
+#define CONST_EALREADY EALREADY
+
+/* The value of EBADF. */
+#if !defined(EBADF)
+#define EBADF 10000
+#endif
+#define CONST_EBADF EBADF
+
+/* The value of EBADMSG. */
+#if !defined(EBADMSG)
+#define EBADMSG 10000
+#endif
+#define CONST_EBADMSG EBADMSG
+
+/* The value of EBADRPC. */
+#if !defined(EBADRPC)
+#define EBADRPC 10000
+#endif
+#define CONST_EBADRPC EBADRPC
+
+/* The value of EBUSY. */
+#if !defined(EBUSY)
+#define EBUSY 10000
+#endif
+#define CONST_EBUSY EBUSY
+
+/* The value of ECHILD. */
+#if !defined(ECHILD)
+#define ECHILD 10000
+#endif
+#define CONST_ECHILD ECHILD
+
+/* The value of ECOMM. */
+#if !defined(ECOMM)
+#define ECOMM 10000
+#endif
+#define CONST_ECOMM ECOMM
+
+/* The value of ECONNABORTED. */
+#if !defined(ECONNABORTED)
+#define ECONNABORTED 10000
+#endif
+#define CONST_ECONNABORTED ECONNABORTED
+
+/* The value of ECONNREFUSED. */
+#if !defined(ECONNREFUSED)
+#define ECONNREFUSED 10000
+#endif
+#define CONST_ECONNREFUSED ECONNREFUSED
+
+/* The value of ECONNRESET. */
+#if !defined(ECONNRESET)
+#define ECONNRESET 10000
+#endif
+#define CONST_ECONNRESET ECONNRESET
+
+/* The value of EDEADLK. */
+#if !defined(EDEADLK)
+#define EDEADLK 10000
+#endif
+#define CONST_EDEADLK EDEADLK
+
+/* The value of EDESTADDRREQ. */
+#if !defined(EDESTADDRREQ)
+#define EDESTADDRREQ 10000
+#endif
+#define CONST_EDESTADDRREQ EDESTADDRREQ
+
+/* The value of EDIRTY. */
+#if !defined(EDIRTY)
+#define EDIRTY 10000
+#endif
+#define CONST_EDIRTY EDIRTY
+
+/* The value of EDOM. */
+#if !defined(EDOM)
+#define EDOM 10000
+#endif
+#define CONST_EDOM EDOM
+
+/* The value of EDQUOT. */
+#if !defined(EDQUOT)
+#define EDQUOT 10000
+#endif
+#define CONST_EDQUOT EDQUOT
+
+/* The value of EEXIST. */
+#if !defined(EEXIST)
+#define EEXIST 10000
+#endif
+#define CONST_EEXIST EEXIST
+
+/* The value of EFAULT. */
+#if !defined(EFAULT)
+#define EFAULT 10000
+#endif
+#define CONST_EFAULT EFAULT
+
+/* The value of EFBIG. */
+#if !defined(EFBIG)
+#define EFBIG 10000
+#endif
+#define CONST_EFBIG EFBIG
+
+/* The value of EFTYPE. */
+#if !defined(EFTYPE)
+#define EFTYPE 10000
+#endif
+#define CONST_EFTYPE EFTYPE
+
+/* The value of EHOSTDOWN. */
+#if !defined(EHOSTDOWN)
+#define EHOSTDOWN 10000
+#endif
+#define CONST_EHOSTDOWN EHOSTDOWN
+
+/* The value of EHOSTUNREACH. */
+#if !defined(EHOSTUNREACH)
+#define EHOSTUNREACH 10000
+#endif
+#define CONST_EHOSTUNREACH EHOSTUNREACH
+
+/* The value of EIDRM. */
+#if !defined(EIDRM)
+#define EIDRM 10000
+#endif
+#define CONST_EIDRM EIDRM
+
+/* The value of EILSEQ. */
+#if !defined(EILSEQ)
+#define EILSEQ 10000
+#endif
+#define CONST_EILSEQ EILSEQ
+
+/* The value of EINPROGRESS. */
+#if !defined(EINPROGRESS)
+#define EINPROGRESS 10000
+#endif
+#define CONST_EINPROGRESS EINPROGRESS
+
+/* The value of EINTR. */
+#if !defined(EINTR)
+#define EINTR 10000
+#endif
+#define CONST_EINTR EINTR
+
+/* The value of EINVAL. */
+#if !defined(EINVAL)
+#define EINVAL 10000
+#endif
+#define CONST_EINVAL EINVAL
+
+/* The value of EIO. */
+#if !defined(EIO)
+#define EIO 10000
+#endif
+#define CONST_EIO EIO
+
+/* The value of EISCONN. */
+#if !defined(EISCONN)
+#define EISCONN 10000
+#endif
+#define CONST_EISCONN EISCONN
+
+/* The value of EISDIR. */
+#if !defined(EISDIR)
+#define EISDIR 10000
+#endif
+#define CONST_EISDIR EISDIR
+
+/* The value of ELOOP. */
+#if !defined(ELOOP)
+#define ELOOP 10000
+#endif
+#define CONST_ELOOP ELOOP
+
+/* The value of EMFILE. */
+#if !defined(EMFILE)
+#define EMFILE 10000
+#endif
+#define CONST_EMFILE EMFILE
+
+/* The value of EMLINK. */
+#if !defined(EMLINK)
+#define EMLINK 10000
+#endif
+#define CONST_EMLINK EMLINK
+
+/* The value of EMSGSIZE. */
+#if !defined(EMSGSIZE)
+#define EMSGSIZE 10000
+#endif
+#define CONST_EMSGSIZE EMSGSIZE
+
+/* The value of EMULTIHOP. */
+#if !defined(EMULTIHOP)
+#define EMULTIHOP 10000
+#endif
+#define CONST_EMULTIHOP EMULTIHOP
+
+/* The value of ENAMETOOLONG. */
+#if !defined(ENAMETOOLONG)
+#define ENAMETOOLONG 10000
+#endif
+#define CONST_ENAMETOOLONG ENAMETOOLONG
+
+/* The value of ENETDOWN. */
+#if !defined(ENETDOWN)
+#define ENETDOWN 10000
+#endif
+#define CONST_ENETDOWN ENETDOWN
+
+/* The value of ENETRESET. */
+#if !defined(ENETRESET)
+#define ENETRESET 10000
+#endif
+#define CONST_ENETRESET ENETRESET
+
+/* The value of ENETUNREACH. */
+#if !defined(ENETUNREACH)
+#define ENETUNREACH 10000
+#endif
+#define CONST_ENETUNREACH ENETUNREACH
+
+/* The value of ENFILE. */
+#if !defined(ENFILE)
+#define ENFILE 10000
+#endif
+#define CONST_ENFILE ENFILE
+
+/* The value of ENOBUFS. */
+#if !defined(ENOBUFS)
+#define ENOBUFS 10000
+#endif
+#define CONST_ENOBUFS ENOBUFS
+
+/* The value of ENOCIGAR. */
+#if !defined(ENOCIGAR)
+#define ENOCIGAR 10000
+#endif
+#define CONST_ENOCIGAR ENOCIGAR
+
+/* The value of ENODATA. */
+#if !defined(ENODATA)
+#define ENODATA 10000
+#endif
+#define CONST_ENODATA ENODATA
+
+/* The value of ENODEV. */
+#if !defined(ENODEV)
+#define ENODEV 10000
+#endif
+#define CONST_ENODEV ENODEV
+
+/* The value of ENOENT. */
+#if !defined(ENOENT)
+#define ENOENT 10000
+#endif
+#define CONST_ENOENT ENOENT
+
+/* The value of ENOEXEC. */
+#if !defined(ENOEXEC)
+#define ENOEXEC 10000
+#endif
+#define CONST_ENOEXEC ENOEXEC
+
+/* The value of ENOLCK. */
+#if !defined(ENOLCK)
+#define ENOLCK 10000
+#endif
+#define CONST_ENOLCK ENOLCK
+
+/* The value of ENOLINK. */
+#if !defined(ENOLINK)
+#define ENOLINK 10000
+#endif
+#define CONST_ENOLINK ENOLINK
+
+/* The value of ENOMEM. */
+#if !defined(ENOMEM)
+#define ENOMEM 10000
+#endif
+#define CONST_ENOMEM ENOMEM
+
+/* The value of ENOMSG. */
+#if !defined(ENOMSG)
+#define ENOMSG 10000
+#endif
+#define CONST_ENOMSG ENOMSG
+
+/* The value of ENONET. */
+#if !defined(ENONET)
+#define ENONET 10000
+#endif
+#define CONST_ENONET ENONET
+
+/* The value of ENOPROTOOPT. */
+#if !defined(ENOPROTOOPT)
+#define ENOPROTOOPT 10000
+#endif
+#define CONST_ENOPROTOOPT ENOPROTOOPT
+
+/* The value of ENOSPC. */
+#if !defined(ENOSPC)
+#define ENOSPC 10000
+#endif
+#define CONST_ENOSPC ENOSPC
+
+/* The value of ENOSR. */
+#if !defined(ENOSR)
+#define ENOSR 10000
+#endif
+#define CONST_ENOSR ENOSR
+
+/* The value of ENOSTR. */
+#if !defined(ENOSTR)
+#define ENOSTR 10000
+#endif
+#define CONST_ENOSTR ENOSTR
+
+/* The value of ENOSYS. */
+#if !defined(ENOSYS)
+#define ENOSYS 10000
+#endif
+#define CONST_ENOSYS ENOSYS
+
+/* The value of ENOTBLK. */
+#if !defined(ENOTBLK)
+#define ENOTBLK 10000
+#endif
+#define CONST_ENOTBLK ENOTBLK
+
+/* The value of ENOTCONN. */
+#if !defined(ENOTCONN)
+#define ENOTCONN 10000
+#endif
+#define CONST_ENOTCONN ENOTCONN
+
+/* The value of ENOTDIR. */
+#if !defined(ENOTDIR)
+#define ENOTDIR 10000
+#endif
+#define CONST_ENOTDIR ENOTDIR
+
+/* The value of ENOTEMPTY. */
+#if !defined(ENOTEMPTY)
+#define ENOTEMPTY 10000
+#endif
+#define CONST_ENOTEMPTY ENOTEMPTY
+
+/* The value of ENOTSOCK. */
+#if !defined(ENOTSOCK)
+#define ENOTSOCK 10000
+#endif
+#define CONST_ENOTSOCK ENOTSOCK
+
+/* The value of ENOTTY. */
+#if !defined(ENOTTY)
+#define ENOTTY 10000
+#endif
+#define CONST_ENOTTY ENOTTY
+
+/* The value of ENXIO. */
+#if !defined(ENXIO)
+#define ENXIO 10000
+#endif
+#define CONST_ENXIO ENXIO
+
+/* The value of EOPNOTSUPP. */
+#if !defined(EOPNOTSUPP)
+#define EOPNOTSUPP 10000
+#endif
+#define CONST_EOPNOTSUPP EOPNOTSUPP
+
+/* The value of EPERM. */
+#if !defined(EPERM)
+#define EPERM 10000
+#endif
+#define CONST_EPERM EPERM
+
+/* The value of EPFNOSUPPORT. */
+#if !defined(EPFNOSUPPORT)
+#define EPFNOSUPPORT 10000
+#endif
+#define CONST_EPFNOSUPPORT EPFNOSUPPORT
+
+/* The value of EPIPE. */
+#if !defined(EPIPE)
+#define EPIPE 10000
+#endif
+#define CONST_EPIPE EPIPE
+
+/* The value of EPROCLIM. */
+#if !defined(EPROCLIM)
+#define EPROCLIM 10000
+#endif
+#define CONST_EPROCLIM EPROCLIM
+
+/* The value of EPROCUNAVAIL. */
+#if !defined(EPROCUNAVAIL)
+#define EPROCUNAVAIL 10000
+#endif
+#define CONST_EPROCUNAVAIL EPROCUNAVAIL
+
+/* The value of EPROGMISMATCH. */
+#if !defined(EPROGMISMATCH)
+#define EPROGMISMATCH 10000
+#endif
+#define CONST_EPROGMISMATCH EPROGMISMATCH
+
+/* The value of EPROGUNAVAIL. */
+#if !defined(EPROGUNAVAIL)
+#define EPROGUNAVAIL 10000
+#endif
+#define CONST_EPROGUNAVAIL EPROGUNAVAIL
+
+/* The value of EPROTO. */
+#if !defined(EPROTO)
+#define EPROTO 10000
+#endif
+#define CONST_EPROTO EPROTO
+
+/* The value of EPROTONOSUPPORT. */
+#if !defined(EPROTONOSUPPORT)
+#define EPROTONOSUPPORT 10000
+#endif
+#define CONST_EPROTONOSUPPORT EPROTONOSUPPORT
+
+/* The value of EPROTOTYPE. */
+#if !defined(EPROTOTYPE)
+#define EPROTOTYPE 10000
+#endif
+#define CONST_EPROTOTYPE EPROTOTYPE
+
+/* The value of ERANGE. */
+#if !defined(ERANGE)
+#define ERANGE 10000
+#endif
+#define CONST_ERANGE ERANGE
+
+/* The value of EREMCHG. */
+#if !defined(EREMCHG)
+#define EREMCHG 10000
+#endif
+#define CONST_EREMCHG EREMCHG
+
+/* The value of EREMOTE. */
+#if !defined(EREMOTE)
+#define EREMOTE 10000
+#endif
+#define CONST_EREMOTE EREMOTE
+
+/* The value of EROFS. */
+#if !defined(EROFS)
+#define EROFS 10000
+#endif
+#define CONST_EROFS EROFS
+
+/* The value of ERPCMISMATCH. */
+#if !defined(ERPCMISMATCH)
+#define ERPCMISMATCH 10000
+#endif
+#define CONST_ERPCMISMATCH ERPCMISMATCH
+
+/* The value of ERREMOTE. */
+#if !defined(ERREMOTE)
+#define ERREMOTE 10000
+#endif
+#define CONST_ERREMOTE ERREMOTE
+
+/* The value of ESHUTDOWN. */
+#if !defined(ESHUTDOWN)
+#define ESHUTDOWN 10000
+#endif
+#define CONST_ESHUTDOWN ESHUTDOWN
+
+/* The value of ESOCKTNOSUPPORT. */
+#if !defined(ESOCKTNOSUPPORT)
+#define ESOCKTNOSUPPORT 10000
+#endif
+#define CONST_ESOCKTNOSUPPORT ESOCKTNOSUPPORT
+
+/* The value of ESPIPE. */
+#if !defined(ESPIPE)
+#define ESPIPE 10000
+#endif
+#define CONST_ESPIPE ESPIPE
+
+/* The value of ESRCH. */
+#if !defined(ESRCH)
+#define ESRCH 10000
+#endif
+#define CONST_ESRCH ESRCH
+
+/* The value of ESRMNT. */
+#if !defined(ESRMNT)
+#define ESRMNT 10000
+#endif
+#define CONST_ESRMNT ESRMNT
+
+/* The value of ESTALE. */
+#if !defined(ESTALE)
+#define ESTALE 10000
+#endif
+#define CONST_ESTALE ESTALE
+
+/* The value of ETIME. */
+#if !defined(ETIME)
+#define ETIME 10000
+#endif
+#define CONST_ETIME ETIME
+
+/* The value of ETIMEDOUT. */
+#if !defined(ETIMEDOUT)
+#define ETIMEDOUT 10000
+#endif
+#define CONST_ETIMEDOUT ETIMEDOUT
+
+/* The value of ETOOMANYREFS. */
+#if !defined(ETOOMANYREFS)
+#define ETOOMANYREFS 10000
+#endif
+#define CONST_ETOOMANYREFS ETOOMANYREFS
+
+/* The value of ETXTBSY. */
+#if !defined(ETXTBSY)
+#define ETXTBSY 10000
+#endif
+#define CONST_ETXTBSY ETXTBSY
+
+/* The value of EUSERS. */
+#if !defined(EUSERS)
+#define EUSERS 10000
+#endif
+#define CONST_EUSERS EUSERS
+
+/* The value of EWOULDBLOCK. */
+#if !defined(EWOULDBLOCK)
+#define EWOULDBLOCK 10000
+#endif
+#define CONST_EWOULDBLOCK EWOULDBLOCK
+
+/* The value of EXDEV. */
+#if !defined(EXDEV)
+#define EXDEV 10000
+#endif
+#define CONST_EXDEV EXDEV
+
+/* The value of O_BINARY. */
+#if !defined(O_BINARY)
+#define O_BINARY 10000
+#endif
+#define CONST_O_BINARY O_BINARY
+
+/* The value of SIGINT. */
+#if !defined(SIGINT)
+#define SIGINT 10000
+#endif
+#define CONST_SIGINT SIGINT
+
+
+#endif
+
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/include/IntLikeInstance.h b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/include/IntLikeInstance.h
new file mode 100644
--- /dev/null
+++ b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/include/IntLikeInstance.h
@@ -0,0 +1,242 @@
+{- --------------------------------------------------------------------------
+// Macros to help make various instances for Int like types (Int8, ...).
+//
+// Primitives are defined by 2 forms of macros:
+//  - starting with PRIMS_  : name of Haskell function and primitive is the same
+//  - starting with PRIMS2_ : name of primitive is given explicitly, to allow sharing between primitives
+// --------------------------------------------------------------------------
+-}
+
+-- define conversion primitives
+#define PRIMS_CONVERSION_INTEGER(tycon,primIntegerTo,primToInteger) \
+foreign import prim primIntegerTo :: Integer -> tycon ; \
+foreign import prim primToInteger :: tycon -> Integer 
+
+#define PRIMS2_CONVERSION_INTEGER(tycon,primIntegerTo,primIntegerToNm,primToInteger,primToIntegerNm) \
+foreign import prim primIntegerToNm primIntegerTo :: Integer -> tycon ; \
+foreign import prim primToIntegerNm primToInteger :: tycon -> Integer 
+
+#define PRIMS_CONVERSION_INT(tycon,primIntTo,primToInt) \
+foreign import prim primIntTo     :: Int -> tycon ; \
+foreign import prim primToInt     :: tycon -> Int 
+
+
+-- define Eq primitives
+#define PRIMS_EQ(tycon,primEq,primNe) \
+foreign import prim primEq      :: tycon -> tycon -> Bool ; \
+foreign import prim primNe      :: tycon -> tycon -> Bool 
+
+#define PRIMS2_EQ(tycon,primEq,primEqNm,primNe,primNeNm) \
+foreign import prim primEqNm primEq     :: tycon -> tycon -> Bool ; \
+foreign import prim primNeNm primNe     :: tycon -> tycon -> Bool
+
+
+-- define Eq instance
+#define INSTANCE_EQ(tycon,primEq,primNe) \
+instance Eq tycon where \
+  { (==) = primEq ; \
+  	(/=) = primNe \
+  }
+
+
+-- define Ord primitives
+
+#define PRIMS_ORD(tycon,primCmp,primLt,primGt,primLe,primGe) \
+foreign import prim primCmp     :: tycon -> tycon -> Ordering ; \
+foreign import prim primLt      :: tycon -> tycon -> Bool ; \
+foreign import prim primGt      :: tycon -> tycon -> Bool ; \
+foreign import prim primLe      :: tycon -> tycon -> Bool ; \
+foreign import prim primGe      :: tycon -> tycon -> Bool 
+
+#define PRIMS2_ORD(tycon,primCmp,primCmpNm,primLt,primLtNm,primGt,primGtNm,primLe,primLeNm,primGe,primGeNm) \
+foreign import prim primCmpNm primCmp     :: tycon -> tycon -> Ordering ; \
+foreign import prim primLtNm primLt      :: tycon -> tycon -> Bool ; \
+foreign import prim primGtNm primGt      :: tycon -> tycon -> Bool ; \
+foreign import prim primLeNm primLe      :: tycon -> tycon -> Bool ; \
+foreign import prim primGeNm primGe      :: tycon -> tycon -> Bool 
+
+
+-- define Ord instance
+
+#define INSTANCE_ORD(tycon,primCmp,primLt,primGt,primLe,primGe) \
+instance Ord tycon where \
+  { compare = primCmp \
+  ; (<) = primLt \
+  ; (>) = primGt \
+  ; (<=) = primLe \
+  ; (>=) = primGe \
+  }
+
+
+-- define Bounded primitives
+#define PRIMS_BOUNDED(tycon,primMin,primMax) \
+foreign import prim primMin     :: tycon ; \
+foreign import prim primMax     :: tycon 
+
+
+-- define Bounded instance
+#define INSTANCE_BOUNDED(tycon,primMin,primMax) \
+instance Bounded tycon where \
+  { minBound = primMin \
+  ; maxBound = primMax \
+  }
+
+
+-- define Num primitives
+#define PRIMS_NUM(tycon,primAdd,primSub,primMul,primNeg) \
+foreign import prim primAdd       :: tycon -> tycon -> tycon ; \
+foreign import prim primSub       :: tycon -> tycon -> tycon ; \
+foreign import prim primMul       :: tycon -> tycon -> tycon ; \
+foreign import prim primNeg       :: tycon -> tycon 
+
+#define PRIMS2_NUM(tycon,primAdd,primAddNm,primSub,primSubNm,primMul,primMulNm,primNeg,primNegNm) \
+foreign import prim primAddNm 			primAdd       :: tycon -> tycon -> tycon ; \
+foreign import prim primSubNm 			primSub       :: tycon -> tycon -> tycon ; \
+foreign import prim primMulNm 			primMul       :: tycon -> tycon -> tycon ; \
+foreign import prim primNegNm 			primNeg       :: tycon -> tycon 
+
+
+-- define Num instance
+#define INSTANCE_NUM(tycon,primAdd,primSub,primMul,primNeg,primIntegerTo,primIntTo) \
+instance Num tycon where \
+  { (+)         = primAdd \
+  ; (-)         = primSub \
+  ; (*)         = primMul \
+  ; negate      = primNeg \
+  ; fromInteger = primIntegerTo \
+  ; fromInt     = primIntTo \
+  ; abs         = absReal \
+  ; signum      = signumReal \
+  }
+
+
+-- define Enum instance
+#define INSTANCE_ENUM(tycon,primToEnum,primFromEnum) \
+instance Enum tycon where \
+  { succ           = boundedSucc \
+  ; pred           = boundedPred \
+  ; toEnum         = primToEnum \
+  ; fromEnum       = primFromEnum \
+  ; enumFrom       = boundedEnumFrom \
+  ; enumFromTo     = boundedEnumFromTo \
+  ; enumFromThen   = boundedEnumFromThen \
+  ; enumFromThenTo = boundedEnumFromThenTo \
+  }
+
+
+-- define Real instance
+#define INSTANCE_REAL(tycon) \
+instance Real tycon where \
+  { toRational x = toInteger x % 1 \
+  }
+
+
+-- define Integral primitives
+#define PRIMS_INTEGRAL1(tycon,primDiv,primMod,primQuot,primRem) \
+foreign import prim primDiv       :: tycon -> tycon -> tycon ; \
+foreign import prim primMod       :: tycon -> tycon -> tycon ; \
+foreign import prim primQuot      :: tycon -> tycon -> tycon ; \
+foreign import prim primRem       :: tycon -> tycon -> tycon 
+
+#define PRIMS2_INTEGRAL1(tycon,primDiv,primDivNm,primMod,primModNm,primQuot,primQuotNm,primRem,primRemNm) \
+foreign import prim primDivNm 			primDiv       :: tycon -> tycon -> tycon ; \
+foreign import prim primModNm 			primMod       :: tycon -> tycon -> tycon ; \
+foreign import prim primQuotNm 			primQuot      :: tycon -> tycon -> tycon ; \
+foreign import prim primRemNm 			primRem       :: tycon -> tycon -> tycon 
+
+#define PRIMS_INTEGRAL2(tycon,primDiv,primMod,primDivMod,primQuot,primRem,primQuotRem) \
+PRIMS_INTEGRAL1(tycon,primDiv,primMod,primQuot,primRem) ; \
+foreign import prim primDivMod    :: tycon -> tycon -> (tycon,tycon) ; \
+foreign import prim primQuotRem   :: tycon -> tycon -> (tycon,tycon) 
+
+#define PRIMS2_INTEGRAL2(tycon,primDiv,primDivNm,primMod,primModNm,primDivMod,primDivModNm,primQuot,primQuotNm,primRem,primRemNm,primQuotRem,primQuotRemNm) \
+PRIMS2_INTEGRAL1(tycon,primDiv,primDivNm,primMod,primModNm,primQuot,primQuotNm,primRem,primQuotRemNm) ; \
+foreign import prim primDivModNm 	primDivMod    :: tycon -> tycon -> (tycon,tycon) ; \
+foreign import prim primQuotRemNm 	primQuotRem   :: tycon -> tycon -> (tycon,tycon) 
+
+
+-- define Integral instance, assume default for divMod
+#define INSTANCE_INTEGRAL1(tycon,primDiv,primMod,primQuot,primRem,primToInteger,primToInt) \
+instance Integral tycon where \
+  { quotRem d m \
+              = (primQuot d m, primRem d m) \
+  ; div       = primDiv \
+  ; quot      = primQuot \
+  ; rem       = primRem \
+  ; mod       = primMod \
+  ; toInteger = primToInteger \
+  ; toInt     = primToInt \
+  }
+
+#define INSTANCE_INTEGRAL2(tycon,primDiv,primMod,primDivMod,primQuot,primRem,primQuotRem,primToInteger,primToInt) \
+instance Integral tycon where \
+  { divMod    = primDivMod \
+  ; quotRem   = primQuotRem \
+  ; div       = primDiv \
+  ; quot      = primQuot \
+  ; rem       = primRem \
+  ; mod       = primMod \
+  ; toInteger = primToInteger \
+  ; toInt     = primToInt \
+  }
+
+
+-- define Show instance
+#define INSTANCE_SHOW(tycon) \
+instance Show tycon where \
+  { show = show . toInteger \
+  }
+
+
+-- define Read instance
+#define INSTANCE_READ(tycon) \
+instance Read tycon where \
+  { readsPrec p = readSigned readDec \
+  }
+
+
+-- define Bits primitives
+#define PRIMS_BITLOGIC(tycon,primAnd,primOr,primXor) \
+foreign import prim primAnd       	:: tycon -> tycon -> tycon ; \
+foreign import prim primOr       	:: tycon -> tycon -> tycon ; \
+foreign import prim primXor      	:: tycon -> tycon -> tycon
+
+#define PRIMS_BITSHIFT(tycon,primComplement,primShiftLeft,primShiftRight,primRotateLeft,primRotateRight) \
+foreign import prim primComplement	:: tycon -> tycon ; \
+foreign import prim primShiftLeft  	:: tycon -> Int -> tycon ; \
+foreign import prim primShiftRight 	:: tycon -> Int -> tycon ; \
+foreign import prim primRotateLeft  :: tycon -> Int -> tycon ; \
+foreign import prim primRotateRight :: tycon -> Int -> tycon
+
+#define PRIMS2_BITLOGIC(tycon,primAnd,primAndNm,primOr,primOrNm,primXor,primXorNm) \
+foreign import prim primAndNm       	primAnd       	:: tycon -> tycon -> tycon ; \
+foreign import prim primOrNm       		primOr       	:: tycon -> tycon -> tycon ; \
+foreign import prim primXorNm      		primXor      	:: tycon -> tycon -> tycon
+
+#define PRIMS2_BITSHIFT(tycon,primComplement,primComplementNm,primShiftLeft,primShiftLeftNm,primShiftRight,primShiftRightNm,primRotateLeft,primRotateLeftNm,primRotateRight,primRotateRightNm) \
+foreign import prim primComplementNm	primComplement	:: tycon -> tycon ; \
+foreign import prim primShiftLeftNm  	primShiftLeft  	:: tycon -> Int -> tycon ; \
+foreign import prim primShiftRightNm 	primShiftRight 	:: tycon -> Int -> tycon ; \
+foreign import prim primRotateLeftNm  	primRotateLeft  :: tycon -> Int -> tycon ; \
+foreign import prim primRotateRightNm 	primRotateRight :: tycon -> Int -> tycon
+
+-- define Bits instance
+#define INSTANCE_BITS1(tycon,size,signed,primAnd,primOr,primXor,primComplement,primShiftLeft,primShiftRight,primRotateLeft,primRotateRight) \
+instance Bits tycon where \
+  { (.&.)   	= primAnd \
+  ; (.|.)   	= primOr \
+  ; xor	   		= primXor \
+  ; complement  = primComplement \
+  ; shiftL      = primShiftLeft \
+  ; shiftR      = primShiftRight \
+  ; rotateL     = primRotateLeft \
+  ; rotateR     = primRotateRight \
+  ; bitSize _   = size \
+  ; isSigned _  = signed \
+  }
+
+
+
+
+
+
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/include/MachDeps.h b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/include/MachDeps.h
new file mode 100644
--- /dev/null
+++ b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/include/MachDeps.h
@@ -0,0 +1,125 @@
+/* ehclib/uhcbase/include/MachDeps.h.  Generated from MachDeps.h.in by configure.  */
+#ifndef MACHDEPS_H
+#define MACHDEPS_H
+
+#define SIZEOF_INTPTR_T 8
+#define SIZEOF_CHAR 1
+#define SIZEOF_SHORT 2
+#define SIZEOF_INT 4
+#define SIZEOF_LONG 8
+#define SIZEOF_LONG_LONG 8
+#define SIZEOF_FLOAT 4
+#define SIZEOF_DOUBLE 8
+#define SIZEOF_UNSIGNED_CHAR 1
+#define SIZEOF_UNSIGNED_SHORT 2
+#define SIZEOF_UNSIGNED_INT 4
+#define SIZEOF_UNSIGNED_LONG 8
+#define SIZEOF_UNSIGNED_LONG_LONG 8
+#define SIZEOF_VOID_P 8
+
+#define SIZEOF_DEV_T 4
+#define SIZEOF_INO_T 8
+#define SIZEOF_OFF_T 8
+#define SIZEOF_MODE_T 2
+#define SIZEOF_PID_T 4
+#define SIZEOF_SSIZE_T 8
+#define SIZEOF_GID_T 4
+#define SIZEOF_NLINK_T 2
+#define SIZEOF_UID_T 4
+#define SIZEOF_RLIM_T 8
+#define SIZEOF_CLOCK_T 8
+#define SIZEOF_TIME_T 8
+#define SIZEOF_SIZE_T 8
+#define SIZEOF_WCHAR_T 4
+
+#define SIZEOF_CC_T 1
+#define SIZEOF_SPEED_T 8
+#define SIZEOF_TCFLAG_T 8
+
+#define ALIGNOF_INTPTR_T 8
+#define ALIGNOF_CHAR 1
+#define ALIGNOF_SHORT 2
+#define ALIGNOF_INT 4
+#define ALIGNOF_LONG 8
+#define ALIGNOF_LONG_LONG 8
+#define ALIGNOF_FLOAT 4
+#define ALIGNOF_DOUBLE 8
+#define ALIGNOF_UNSIGNED_CHAR 1
+#define ALIGNOF_UNSIGNED_SHORT 2
+#define ALIGNOF_UNSIGNED_INT 4
+#define ALIGNOF_UNSIGNED_LONG 8
+#define ALIGNOF_UNSIGNED_LONG_LONG 8
+#define ALIGNOF_VOID_P 8
+
+#define ALIGNOF_UINT8_T 1
+#define ALIGNOF_UINT16_T 2
+#define ALIGNOF_UINT32_T 4
+#define ALIGNOF_UINT64_T 8
+
+#if SIZEOF_INTPTR_T == 8
+#define USE_64_BITS 1
+#define USE_32_BITS 0
+#else
+#define USE_64_BITS 0
+#define USE_32_BITS 1
+#endif
+
+#ifdef __UHC_TARGET_BC__
+#define BITSIZEOF_WORDTAG		1
+#else
+#define BITSIZEOF_WORDTAG		0
+#endif
+
+#define SIZEOF_HSCHAR           SIZEOF_INTPTR_T
+#define ALIGNMENT_HSCHAR        ALIGNOF_UINT32_T
+
+#define SIZEOF_HSINT            SIZEOF_INTPTR_T
+#define ALIGNMENT_HSINT         ALIGNOF_INTPTR_T
+
+#define SIZEOF_HSWORD			SIZEOF_INTPTR_T
+#define ALIGNMENT_HSWORD		ALIGNOF_INTPTR_T
+
+#define SIZEOF_HSDOUBLE			SIZEOF_DOUBLE
+#define ALIGNMENT_HSDOUBLE		ALIGNOF_DOUBLE
+
+#define SIZEOF_HSFLOAT			SIZEOF_FLOAT
+#define ALIGNMENT_HSFLOAT		ALIGNOF_FLOAT
+
+#define SIZEOF_HSPTR            SIZEOF_VOID_P
+#define ALIGNMENT_HSPTR         ALIGNOF_VOID_P
+
+#define SIZEOF_HSFUNPTR         SIZEOF_VOID_P
+#define ALIGNMENT_HSFUNPTR      ALIGNOF_VOID_P
+
+#define SIZEOF_HSFOREIGNPTR     SIZEOF_VOID_P
+#define ALIGNMENT_HSFOREIGNPTR  ALIGNOF_VOID_P
+
+#define SIZEOF_HSSTABLEPTR      SIZEOF_VOID_P
+#define ALIGNMENT_HSSTABLEPTR   ALIGNOF_VOID_P
+
+#define SIZEOF_INT8             8
+#define ALIGNMENT_INT8          ALIGNOF_UINT8_T
+
+#define SIZEOF_WORD8            8
+#define ALIGNMENT_WORD8         ALIGNOF_UINT8_T
+
+#define SIZEOF_INT16            16
+#define ALIGNMENT_INT16         ALIGNOF_UINT16_T
+
+#define SIZEOF_WORD16           16
+#define ALIGNMENT_WORD16        ALIGNOF_UINT16_T
+
+#define SIZEOF_INT32            32
+#define ALIGNMENT_INT32         ALIGNOF_UINT32_T
+
+#define SIZEOF_WORD32           32
+#define ALIGNMENT_WORD32        ALIGNOF_UINT32_T
+
+#define SIZEOF_INT64            64
+#define ALIGNMENT_INT64         ALIGNOF_UINT64_T
+
+#define SIZEOF_WORD64           64
+#define ALIGNMENT_WORD64        ALIGNOF_UINT64_T
+
+
+#endif
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/include/TupleInstance.h b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/include/TupleInstance.h
new file mode 100644
--- /dev/null
+++ b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/include/TupleInstance.h
@@ -0,0 +1,147 @@
+{- --------------------------------------------------------------------------
+// Macros to help make various instances for tuples.
+// A kind of poor mans deriving.
+//
+// --------------------------------------------------------------------------
+-}
+
+#define	COMMA	,
+
+{- --------------------------------------------------------------------------
+// 2 tuple, 1 unary op
+// --------------------------------------------------------------------------
+-}
+#define TUPLE2_UNOP1_INSTANCE(clscon,op1,op1preArg,op1postArg,op1subop,pre,sep,post) \
+instance (clscon a, clscon b) => clscon (a,b) where \
+  { op1 op1preArg (a,b) op1postArg \
+      = pre \
+            op1subop a \
+        sep op1subop b \
+        post \
+  }
+
+{- --------------------------------------------------------------------------
+// 3 tuple, 1 unary op
+// --------------------------------------------------------------------------
+-}
+#define TUPLE3_UNOP1_INSTANCE(clscon,op1,op1preArg,op1postArg,op1subop,pre,sep,post) \
+instance (clscon a, clscon b, clscon c) => clscon (a,b,c) where \
+  { op1 op1preArg (a,b,c) op1postArg \
+      = pre \
+            op1subop a \
+        sep op1subop b \
+        sep op1subop c \
+        post \
+  }
+
+{- --------------------------------------------------------------------------
+// 4 tuple, 1 unary op
+// --------------------------------------------------------------------------
+-}
+#define TUPLE4_UNOP1_INSTANCE(clscon,op1,op1preArg,op1postArg,op1subop,pre,sep,post) \
+instance (clscon a, clscon b, clscon c, clscon d) => clscon (a,b,c,d) where \
+  { op1 op1preArg (a,b,c,d) op1postArg \
+      = pre \
+            op1subop a \
+        sep op1subop b \
+        sep op1subop c \
+        sep op1subop d \
+        post \
+  }
+
+{- --------------------------------------------------------------------------
+// 5 tuple, 1 unary op
+// --------------------------------------------------------------------------
+-}
+#define TUPLE5_UNOP1_INSTANCE(clscon,op1,op1preArg,op1postArg,op1subop,pre,sep,post) \
+instance (clscon a, clscon b, clscon c, clscon d, clscon e) => clscon (a,b,c,d,e) where \
+  { op1 op1preArg (a,b,c,d,e) op1postArg \
+      = pre \
+            op1subop a \
+        sep op1subop b \
+        sep op1subop c \
+        sep op1subop d \
+        sep op1subop e \
+        post \
+  }
+
+{- --------------------------------------------------------------------------
+// Set of 2..n tuple, 1 unary op
+// --------------------------------------------------------------------------
+-}
+#define TUPLE_UNOP1_INSTANCES(clscon,op1,op1preArg,op1postArg,op1subop,pre,sep,post) \
+{ TUPLE2_UNOP1_INSTANCE(clscon,op1,op1preArg,op1postArg,op1subop,pre,sep,post) ;\
+  TUPLE3_UNOP1_INSTANCE(clscon,op1,op1preArg,op1postArg,op1subop,pre,sep,post) ;\
+  TUPLE4_UNOP1_INSTANCE(clscon,op1,op1preArg,op1postArg,op1subop,pre,sep,post) ;\
+  TUPLE5_UNOP1_INSTANCE(clscon,op1,op1preArg,op1postArg,op1subop,pre,sep,post) \
+}
+
+{- --------------------------------------------------------------------------
+// 2 tuple, 1 binary op
+// --------------------------------------------------------------------------
+-}
+#define TUPLE2_BINOP1_INSTANCE(clscon,op1,op1subop,pre,sep,post) \
+instance (clscon a, clscon b) => clscon (a,b) where \
+  { (a1,b1) op1 (a2,b2) \
+      = pre \
+            a1 op1subop a2 \
+        sep b1 op1subop b2 \
+        post \
+  }
+
+{- --------------------------------------------------------------------------
+// 3 tuple, 1 binary op
+// --------------------------------------------------------------------------
+-}
+#define TUPLE3_BINOP1_INSTANCE(clscon,op1,op1subop,pre,sep,post) \
+instance (clscon a, clscon b, clscon c) => clscon (a,b,c) where \
+  { (a1,b1,c1) op1 (a2,b2,c2) \
+      = pre \
+            a1 op1subop a2 \
+        sep b1 op1subop b2 \
+        sep c1 op1subop c2 \
+        post \
+  }
+
+{- --------------------------------------------------------------------------
+// 4 tuple, 1 binary op
+// --------------------------------------------------------------------------
+-}
+#define TUPLE4_BINOP1_INSTANCE(clscon,op1,op1subop,pre,sep,post) \
+instance (clscon a, clscon b, clscon c, clscon d) => clscon (a,b,c,d) where \
+  { (a1,b1,c1,d1) op1 (a2,b2,c2,d2) \
+      = pre \
+            a1 op1subop a2 \
+        sep b1 op1subop b2 \
+        sep c1 op1subop c2 \
+        sep d1 op1subop d2 \
+        post \
+  }
+
+{- --------------------------------------------------------------------------
+// 5 tuple, 1 binary op
+// --------------------------------------------------------------------------
+-}
+#define TUPLE5_BINOP1_INSTANCE(clscon,op1,op1subop,pre,sep,post) \
+instance (clscon a, clscon b, clscon c, clscon d, clscon e) => clscon (a,b,c,d,e) where \
+  { (a1,b1,c1,d1,e1) op1 (a2,b2,c2,d2,e2) \
+      = pre \
+            a1 op1subop a2 \
+        sep b1 op1subop b2 \
+        sep c1 op1subop c2 \
+        sep d1 op1subop d2 \
+        sep e1 op1subop e2 \
+        post \
+  }
+
+{- --------------------------------------------------------------------------
+// Set of 2..n tuple, 1 binary op
+// --------------------------------------------------------------------------
+-}
+#define TUPLE_BINOP1_INSTANCES(clscon,op1,op1subop,pre,sep,post) \
+{ TUPLE2_BINOP1_INSTANCE(clscon,op1,op1subop,pre,sep,post) ;\
+  TUPLE3_BINOP1_INSTANCE(clscon,op1,op1subop,pre,sep,post) ;\
+  TUPLE4_BINOP1_INSTANCE(clscon,op1,op1subop,pre,sep,post) ;\
+  TUPLE5_BINOP1_INSTANCE(clscon,op1,op1subop,pre,sep,post) \
+}
+
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/include/Typeable.h b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/include/Typeable.h
new file mode 100644
--- /dev/null
+++ b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/include/Typeable.h
@@ -0,0 +1,149 @@
+{- --------------------------------------------------------------------------
+// Macros to help make Typeable instances.
+//
+// INSTANCE_TYPEABLEn(tc,tcname,"tc") defines
+//
+//	instance Typeable/n/ tc
+//	instance Typeable a => Typeable/n-1/ (tc a)
+//	instance (Typeable a, Typeable b) => Typeable/n-2/ (tc a b)
+//	...
+//	instance (Typeable a1, ..., Typeable an) => Typeable (tc a1 ... an)
+// --------------------------------------------------------------------------
+-}
+
+#ifndef TYPEABLE_H
+#define TYPEABLE_H
+
+#define INSTANCE_TYPEABLE0(tycon,tcname,str) \
+tcname :: TyCon; \
+tcname = mkTyCon str; \
+instance Typeable tycon where { typeOf _ = mkTyConApp tcname [] }
+
+#ifdef __GLASGOW_HASKELL__
+
+--  // For GHC, the extra instances follow from general instance declarations
+--  // defined in Data.Typeable.
+
+#define INSTANCE_TYPEABLE1(tycon,tcname,str) \
+tcname :: TyCon; \
+tcname = mkTyCon str; \
+instance Typeable1 tycon where { typeOf1 _ = mkTyConApp tcname [] }
+
+#define INSTANCE_TYPEABLE2(tycon,tcname,str) \
+tcname :: TyCon; \
+tcname = mkTyCon str; \
+instance Typeable2 tycon where { typeOf2 _ = mkTyConApp tcname [] }
+
+#define INSTANCE_TYPEABLE3(tycon,tcname,str) \
+tcname :: TyCon; \
+tcname = mkTyCon str; \
+instance Typeable3 tycon where { typeOf3 _ = mkTyConApp tcname [] }
+
+#define INSTANCE_TYPEABLE4(tycon,tcname,str) \
+tcname :: TyCon; \
+tcname = mkTyCon str; \
+instance Typeable4 tycon where { typeOf4 _ = mkTyConApp tcname [] }
+
+#define INSTANCE_TYPEABLE5(tycon,tcname,str) \
+tcname :: TyCon; \
+tcname = mkTyCon str; \
+instance Typeable5 tycon where { typeOf5 _ = mkTyConApp tcname [] }
+
+#define INSTANCE_TYPEABLE6(tycon,tcname,str) \
+tcname :: TyCon; \
+tcname = mkTyCon str; \
+instance Typeable6 tycon where { typeOf6 _ = mkTyConApp tcname [] }
+
+#define INSTANCE_TYPEABLE7(tycon,tcname,str) \
+tcname :: TyCon; \
+tcname = mkTyCon str; \
+instance Typeable7 tycon where { typeOf7 _ = mkTyConApp tcname [] }
+
+#else /* !__GLASGOW_HASKELL__ */
+
+#define INSTANCE_TYPEABLE1(tycon,tcname,str) \
+tcname = mkTyCon str; \
+instance Typeable1 tycon where { typeOf1 _ = mkTyConApp tcname [] }; \
+instance Typeable a => Typeable (tycon a) where { typeOf = typeOfDefault }
+
+#define INSTANCE_TYPEABLE2(tycon,tcname,str) \
+tcname = mkTyCon str; \
+instance Typeable2 tycon where { typeOf2 _ = mkTyConApp tcname [] }; \
+instance Typeable a => Typeable1 (tycon a) where { \
+  typeOf1 = typeOf1Default }; \
+instance (Typeable a, Typeable b) => Typeable (tycon a b) where { \
+  typeOf = typeOfDefault }
+
+#define INSTANCE_TYPEABLE3(tycon,tcname,str) \
+tcname = mkTyCon str; \
+instance Typeable3 tycon where { typeOf3 _ = mkTyConApp tcname [] }; \
+instance Typeable a => Typeable2 (tycon a) where { \
+  typeOf2 = typeOf2Default }; \
+instance (Typeable a, Typeable b) => Typeable1 (tycon a b) where { \
+  typeOf1 = typeOf1Default }; \
+instance (Typeable a, Typeable b, Typeable c) => Typeable (tycon a b c) where { \
+  typeOf = typeOfDefault }
+
+#define INSTANCE_TYPEABLE4(tycon,tcname,str) \
+tcname = mkTyCon str; \
+instance Typeable4 tycon where { typeOf4 _ = mkTyConApp tcname [] }; \
+instance Typeable a => Typeable3 (tycon a) where { \
+  typeOf3 = typeOf3Default }; \
+instance (Typeable a, Typeable b) => Typeable2 (tycon a b) where { \
+  typeOf2 = typeOf2Default }; \
+instance (Typeable a, Typeable b, Typeable c) => Typeable1 (tycon a b c) where { \
+  typeOf1 = typeOf1Default }; \
+instance (Typeable a, Typeable b, Typeable c, Typeable d) => Typeable (tycon a b c d) where { \
+  typeOf = typeOfDefault }
+
+#define INSTANCE_TYPEABLE5(tycon,tcname,str) \
+tcname = mkTyCon str; \
+instance Typeable5 tycon where { typeOf5 _ = mkTyConApp tcname [] }; \
+instance Typeable a => Typeable4 (tycon a) where { \
+  typeOf4 = typeOf4Default }; \
+instance (Typeable a, Typeable b) => Typeable3 (tycon a b) where { \
+  typeOf3 = typeOf3Default }; \
+instance (Typeable a, Typeable b, Typeable c) => Typeable2 (tycon a b c) where { \
+  typeOf2 = typeOf2Default }; \
+instance (Typeable a, Typeable b, Typeable c, Typeable d) => Typeable1 (tycon a b c d) where { \
+  typeOf1 = typeOf1Default }; \
+instance (Typeable a, Typeable b, Typeable c, Typeable d, Typeable e) => Typeable (tycon a b c d e) where { \
+  typeOf = typeOfDefault }
+
+#define INSTANCE_TYPEABLE6(tycon,tcname,str) \
+tcname = mkTyCon str; \
+instance Typeable6 tycon where { typeOf6 _ = mkTyConApp tcname [] }; \
+instance Typeable a => Typeable5 (tycon a) where { \
+  typeOf5 = typeOf5Default }; \
+instance (Typeable a, Typeable b) => Typeable4 (tycon a b) where { \
+  typeOf4 = typeOf4Default }; \
+instance (Typeable a, Typeable b, Typeable c) => Typeable3 (tycon a b c) where { \
+  typeOf3 = typeOf3Default }; \
+instance (Typeable a, Typeable b, Typeable c, Typeable d) => Typeable2 (tycon a b c d) where { \
+  typeOf2 = typeOf2Default }; \
+instance (Typeable a, Typeable b, Typeable c, Typeable d, Typeable e) => Typeable1 (tycon a b c d e) where { \
+  typeOf1 = typeOf1Default }; \
+instance (Typeable a, Typeable b, Typeable c, Typeable d, Typeable e, Typeable f) => Typeable (tycon a b c d e f) where { \
+  typeOf = typeOfDefault }
+
+#define INSTANCE_TYPEABLE7(tycon,tcname,str) \
+tcname = mkTyCon str; \
+instance Typeable7 tycon where { typeOf7 _ = mkTyConApp tcname [] }; \
+instance Typeable a => Typeable6 (tycon a) where { \
+  typeOf6 = typeOf6Default }; \
+instance (Typeable a, Typeable b) => Typeable5 (tycon a b) where { \
+  typeOf5 = typeOf5Default }; \
+instance (Typeable a, Typeable b, Typeable c) => Typeable4 (tycon a b c) where { \
+  typeOf4 = typeOf4Default }; \
+instance (Typeable a, Typeable b, Typeable c, Typeable d) => Typeable3 (tycon a b c d) where { \
+  typeOf3 = typeOf3Default }; \
+instance (Typeable a, Typeable b, Typeable c, Typeable d, Typeable e) => Typeable2 (tycon a b c d e) where { \
+  typeOf2 = typeOf2Default }; \
+instance (Typeable a, Typeable b, Typeable c, Typeable d, Typeable e, Typeable f) => Typeable1 (tycon a b c d e f) where { \
+  typeOf1 = typeOf1Default }; \
+instance (Typeable a, Typeable b, Typeable c, Typeable d, Typeable e, Typeable f, Typeable g) => Typeable (tycon a b c d e f g) where { \
+  typeOf = typeOfDefault }
+
+#endif /* !__GLASGOW_HASKELL__ */
+
+#endif
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/include/dirUtils.h b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/include/dirUtils.h
new file mode 100644
--- /dev/null
+++ b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/include/dirUtils.h
@@ -0,0 +1,11 @@
+/* 
+ * (c) The University of Glasgow 2002
+ *
+ * Directory Runtime Support
+ */
+#ifndef __DIRUTILS_H__
+#define __DIRUTILS_H__
+
+extern int __hscore_readdir(DIR *dirPtr, struct dirent **pDirEnt);
+
+#endif /* __DIRUTILS_H__ */
diff --git a/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/installed-pkg-config b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/installed-pkg-config
new file mode 100644
--- /dev/null
+++ b/103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/installed-pkg-config
@@ -0,0 +1,2 @@
+exposed-modules: Control.Monad Data.Bits Data.Char Data.Either Data.Int Data.IORef Data.List Data.Maybe Data.Typeable Data.Word Debug.Trace Foreign.C.Error Foreign.C.String Foreign.C.Types Foreign.C Foreign.ForeignPtr Foreign.Marshal.Alloc Foreign.Marshal.Array Foreign.Marshal.Error Foreign.Marshal.Pool Foreign.Marshal.Utils Foreign.Marshal Foreign.Ptr Foreign.StablePtr Foreign.Storable Foreign System.IO.Error System.IO.Fix System.IO.Unsafe System.IO System.Posix.Internals System.Posix.Types UHC.Array UHC.Base UHC.Bits UHC.Bounded UHC.BoxArray UHC.ByteArray UHC.Char UHC.Conc UHC.Enum UHC.Eq UHC.Float UHC.ForeignPtr UHC.GC UHC.Generics.Tuple UHC.Generics UHC.Handle UHC.Int UHC.IO UHC.IOBase UHC.Ix UHC.LazyST UHC.MutVar UHC.MVar UHC.OldException UHC.OldIO UHC.Ord UHC.Prims UHC.Ptr UHC.Read UHC.Real UHC.Run UHC.Show UHC.ST UHC.StablePtr UHC.StackTrace UHC.Storable UHC.STRef UHC.Types UHC.Weak UHC.WeakPtr UHC.Word Unsafe.Coerce
+build-depends: 
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Control/Monad.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Control/Monad.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Control/Monad.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Control/Monad.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Control/Monad.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Control/Monad.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Control/Monad.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Control/Monad.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Control/Monad.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Bits.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Bits.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Bits.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Bits.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Bits.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Bits.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Bits.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Bits.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Bits.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Char.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Char.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Char.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Char.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Char.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Char.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Char.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Char.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Char.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Either.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Either.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Either.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Either.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Either.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Either.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Either.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Either.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Either.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/IORef.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/IORef.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/IORef.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/IORef.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/IORef.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/IORef.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/IORef.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/IORef.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/IORef.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/List.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/List.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/List.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/List.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/List.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/List.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/List.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/List.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/List.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Maybe.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Maybe.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Maybe.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Maybe.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Maybe.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Maybe.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Maybe.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Maybe.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Maybe.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Typeable.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Typeable.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Typeable.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Typeable.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Typeable.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Typeable.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Typeable.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Typeable.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Typeable.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Debug/Trace.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Debug/Trace.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Debug/Trace.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Debug/Trace.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Debug/Trace.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Debug/Trace.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Debug/Trace.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Debug/Trace.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Debug/Trace.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Foreign/Ptr.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Foreign/Ptr.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Foreign/Ptr.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Foreign/Ptr.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Foreign/Ptr.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Foreign/Ptr.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Foreign/Ptr.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Foreign/Ptr.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Foreign/Ptr.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Foreign/StablePtr.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Foreign/StablePtr.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Foreign/StablePtr.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Foreign/StablePtr.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Foreign/StablePtr.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Foreign/StablePtr.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Foreign/StablePtr.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Foreign/StablePtr.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Foreign/StablePtr.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO/Error.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO/Error.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO/Error.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO/Error.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO/Error.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO/Error.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO/Error.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO/Error.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO/Error.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO/Fix.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO/Fix.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO/Fix.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO/Fix.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO/Fix.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO/Fix.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO/Fix.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO/Fix.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO/Fix.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO/Unsafe.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO/Unsafe.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO/Unsafe.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO/Unsafe.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO/Unsafe.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO/Unsafe.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO/Unsafe.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO/Unsafe.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO/Unsafe.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Array.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Array.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Array.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Array.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Array.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Array.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Array.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Array.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Array.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Base.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Base.cr
deleted file mode 100644
# file too large to diff: 103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Base.cr
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Base.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Base.crr
deleted file mode 100644
# file too large to diff: 103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Base.crr
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Base.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Base.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Base.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Bits.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Bits.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Bits.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Bits.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Bits.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Bits.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Bits.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Bits.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Bits.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Bounded.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Bounded.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Bounded.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Bounded.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Bounded.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Bounded.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Bounded.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Bounded.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Bounded.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/BoxArray.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/BoxArray.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/BoxArray.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/BoxArray.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/BoxArray.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/BoxArray.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/BoxArray.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/BoxArray.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/BoxArray.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Char.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Char.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Char.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Char.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Char.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Char.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Char.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Char.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Char.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Enum.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Enum.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Enum.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Enum.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Enum.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Enum.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Enum.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Enum.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Enum.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Eq.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Eq.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Eq.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Eq.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Eq.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Eq.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Eq.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Eq.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Eq.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Float.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Float.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Float.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Float.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Float.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Float.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Float.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Float.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Float.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/GC.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/GC.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/GC.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/GC.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/GC.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/GC.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/GC.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/GC.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/GC.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Generics.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Generics.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Generics.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Generics.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Generics.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Generics.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Generics.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Generics.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Generics.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Generics/Tuple.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Generics/Tuple.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Generics/Tuple.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Generics/Tuple.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Generics/Tuple.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Generics/Tuple.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Generics/Tuple.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Generics/Tuple.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Generics/Tuple.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Handle.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Handle.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Handle.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Handle.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Handle.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Handle.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Handle.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Handle.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Handle.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/IO.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/IO.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/IO.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/IO.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/IO.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/IO.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/IO.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/IO.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/IO.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/IOBase.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/IOBase.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/IOBase.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/IOBase.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/IOBase.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/IOBase.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/IOBase.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/IOBase.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/IOBase.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Ix.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Ix.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Ix.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Ix.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Ix.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Ix.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Ix.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Ix.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Ix.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/LazyST.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/LazyST.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/LazyST.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/LazyST.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/LazyST.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/LazyST.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/LazyST.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/LazyST.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/LazyST.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/MVar.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/MVar.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/MVar.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/MVar.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/MVar.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/MVar.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/MVar.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/MVar.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/MVar.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/MutVar.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/MutVar.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/MutVar.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/MutVar.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/MutVar.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/MutVar.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/MutVar.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/MutVar.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/MutVar.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/OldException.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/OldException.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/OldException.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/OldException.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/OldException.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/OldException.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/OldException.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/OldException.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/OldException.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Ord.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Ord.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Ord.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Ord.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Ord.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Ord.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Ord.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Ord.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Ord.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Prims.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Prims.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Prims.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Prims.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Prims.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Prims.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Prims.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Prims.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Prims.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Ptr.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Ptr.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Ptr.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Ptr.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Ptr.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Ptr.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Ptr.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Ptr.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Ptr.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Read.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Read.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Read.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Read.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Read.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Read.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Read.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Read.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Read.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Real.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Real.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Real.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Real.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Real.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Real.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Real.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Real.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Real.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Run.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Run.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Run.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Run.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Run.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Run.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Run.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Run.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Run.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/ST.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/ST.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/ST.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/ST.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/ST.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/ST.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/ST.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/ST.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/ST.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/STRef.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/STRef.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/STRef.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/STRef.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/STRef.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/STRef.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/STRef.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/STRef.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/STRef.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Show.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Show.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Show.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Show.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Show.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Show.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Show.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Show.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Show.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/StablePtr.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/StablePtr.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/StablePtr.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/StablePtr.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/StablePtr.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/StablePtr.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/StablePtr.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/StablePtr.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/StablePtr.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/StackTrace.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/StackTrace.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/StackTrace.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/StackTrace.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/StackTrace.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/StackTrace.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/StackTrace.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/StackTrace.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/StackTrace.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Types.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Types.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Types.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Types.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Types.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Types.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Types.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Types.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Types.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Weak.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Weak.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Weak.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Weak.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Weak.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Weak.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Weak.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Weak.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Weak.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/WeakPtr.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/WeakPtr.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/WeakPtr.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/WeakPtr.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/WeakPtr.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/WeakPtr.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/WeakPtr.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/WeakPtr.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/WeakPtr.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Unsafe/Coerce.cr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Unsafe/Coerce.cr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Unsafe/Coerce.cr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Unsafe/Coerce.crr b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Unsafe/Coerce.crr
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Unsafe/Coerce.crr and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Unsafe/Coerce.hi b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Unsafe/Coerce.hi
deleted file mode 100644
Binary files a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Unsafe/Coerce.hi and /dev/null differ
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/include/CTypes.h b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/include/CTypes.h
deleted file mode 100644
--- a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/include/CTypes.h
+++ /dev/null
@@ -1,231 +0,0 @@
-{- --------------------------------------------------------------------------
-// Dirty CPP hackery for CTypes/CTypesISO
-//
-// (c) The FFI task force, 2000
-// --------------------------------------------------------------------------
--}
-
-#ifndef CTYPES__H
-#define CTYPES__H
-
-#include "Typeable.h"
-
-{-
-// As long as there is no automatic derivation of classes for newtypes we resort
-// to extremely dirty cpp-hackery.   :-P   Some care has to be taken when the
-// macros below are modified, otherwise the layout rule will bite you.
--}
-
---  // A hacked version for GHC follows the Haskell 98 version...
-#ifndef __GLASGOW_HASKELL__
-
-#define NEWTYPE_TYPE_NODERIVING(T,B) \
-newtype T = T B ; 
-
-#define NEWTYPE_TYPE(T,B) \
-newtype T = T B deriving (Eq, Ord) ; 
-
-#define ARITHMETIC_TYPE_INSTANCES(T,C,S,B) \
-INSTANCE_NUM(T) ; \
-INSTANCE_REAL(T) ; \
-INSTANCE_READ(T,B) ; \
-INSTANCE_SHOW(T,B) ; \
-INSTANCE_ENUM(T) ; \
-INSTANCE_STORABLE(T) ; \
-INSTANCE_TYPEABLE0(T,C,S) ;
-
-#define INTEGRAL_TYPE_INSTANCES(T,C,S,B) \
-INSTANCE_BOUNDED(T) ; \
-INSTANCE_INTEGRAL(T) ; \
-INSTANCE_BITS(T)
-
-#define ARITHMETIC_TYPE(T,C,S,B) \
-NEWTYPE_TYPE(T,B) ; \
-ARITHMETIC_TYPE_INSTANCES(T,C,S,B) ;
-
-#define INTEGRAL_TYPE(T,C,S,B) \
-ARITHMETIC_TYPE(T,C,S,B) ; \
-INTEGRAL_TYPE_INSTANCES(T,C,S,B)
-
-#define FLOATING_TYPE(T,C,S,B) \
-ARITHMETIC_TYPE(T,C,S,B) ; \
-INSTANCE_FRACTIONAL(T) ; \
-INSTANCE_FLOATING(T) ; \
-INSTANCE_REALFRAC(T) ; \
-INSTANCE_REALFLOAT(T)
-
-#ifndef __GLASGOW_HASKELL__
-#define fakeMap map
-#endif
-
-#define INSTANCE_READ(T,B) \
-instance Read T where { \
-   readsPrec p s = fakeMap (\(x, t) -> (T x, t)) (readsPrec p s) }
-
-#define INSTANCE_SHOW(T,B) \
-instance Show T where { \
-   showsPrec p (T x) = showsPrec p x }
-
-#define INSTANCE_NUM(T) \
-instance Num T where { \
-   (T i) + (T j) = T (i + j) ; \
-   (T i) - (T j) = T (i - j) ; \
-   (T i) * (T j) = T (i * j) ; \
-   negate  (T i) = T (negate i) ; \
-   abs     (T i) = T (abs    i) ; \
-   signum  (T i) = T (signum i) ; \
-   fromInteger x = T (fromInteger x) }
-
-#define INSTANCE_EQ(T) \
-instance Eq T where { \
-   (T x1) == (T x2) = x1 == x2 }
-
-#define INSTANCE_ORD(T) \
-instance Ord T where { \
-   (T x1) `compare` (T x2) = x1 `compare` x2 }
-
-#define INSTANCE_BOUNDED(T) \
-instance Bounded T where { \
-   minBound = T minBound ; \
-   maxBound = T maxBound }
-
-#define INSTANCE_ENUM(T) \
-instance Enum T where { \
-   succ           (T i)             = T (succ i) ; \
-   pred           (T i)             = T (pred i) ; \
-   toEnum               x           = T (toEnum x) ; \
-   fromEnum       (T i)             = fromEnum i ; \
-   enumFrom       (T i)             = fakeMap T (enumFrom i) ; \
-   enumFromThen   (T i) (T j)       = fakeMap T (enumFromThen i j) ; \
-   enumFromTo     (T i) (T j)       = fakeMap T (enumFromTo i j) ; \
-   enumFromThenTo (T i) (T j) (T k) = fakeMap T (enumFromThenTo i j k) }
-
-#define INSTANCE_REAL(T) \
-instance Real T where { \
-   toRational (T i) = toRational i }
-
-#define INSTANCE_INTEGRAL(T) \
-instance Integral T where { \
-   (T i) `quot`    (T j) = T (i `quot` j) ; \
-   (T i) `rem`     (T j) = T (i `rem`  j) ; \
-   (T i) `div`     (T j) = T (i `div`  j) ; \
-   (T i) `mod`     (T j) = T (i `mod`  j) ; \
-   (T i) `quotRem` (T j) = let (q,r) = i `quotRem` j in (T q, T r) ; \
-   (T i) `divMod`  (T j) = let (d,m) = i `divMod`  j in (T d, T m) ; \
-   toInteger (T i)       = toInteger i }
-
-#define INSTANCE_BITS(T) \
-instance Bits T where { \
-  (T x) .&.     (T y)   = T (x .&.   y) ; \
-  (T x) .|.     (T y)   = T (x .|.   y) ; \
-  (T x) `xor`   (T y)   = T (x `xor` y) ; \
-  complement    (T x)   = T (complement x) ; \
-  shift         (T x) n = T (shift x n) ; \
-  rotate        (T x) n = T (rotate x n) ; \
-  bit                 n = T (bit n) ; \
-  setBit        (T x) n = T (setBit x n) ; \
-  clearBit      (T x) n = T (clearBit x n) ; \
-  complementBit (T x) n = T (complementBit x n) ; \
-  testBit       (T x) n = testBit x n ; \
-  bitSize       (T x)   = bitSize x ; \
-  isSigned      (T x)   = isSigned x }
-
-#define INSTANCE_FRACTIONAL(T) \
-instance Fractional T where { \
-   (T x) / (T y)  = T (x / y) ; \
-   recip   (T x)  = T (recip x) ; \
-   fromRational r = T (fromRational r) }
-
-#define INSTANCE_FLOATING(T) \
-instance Floating T where { \
-   pi                    = pi ; \
-   exp   (T x)           = T (exp   x) ; \
-   log   (T x)           = T (log   x) ; \
-   sqrt  (T x)           = T (sqrt  x) ; \
-   (T x) **        (T y) = T (x ** y) ; \
-   (T x) `logBase` (T y) = T (x `logBase` y) ; \
-   sin   (T x)           = T (sin   x) ; \
-   cos   (T x)           = T (cos   x) ; \
-   tan   (T x)           = T (tan   x) ; \
-   asin  (T x)           = T (asin  x) ; \
-   acos  (T x)           = T (acos  x) ; \
-   atan  (T x)           = T (atan  x) ; \
-   sinh  (T x)           = T (sinh  x) ; \
-   cosh  (T x)           = T (cosh  x) ; \
-   tanh  (T x)           = T (tanh  x) ; \
-   asinh (T x)           = T (asinh x) ; \
-   acosh (T x)           = T (acosh x) ; \
-   atanh (T x)           = T (atanh x) }
-
-#define INSTANCE_REALFRAC(T) \
-instance RealFrac T where { \
-   properFraction (T x) = let (m,y) = properFraction x in (m, T y) ; \
-   truncate (T x) = truncate x ; \
-   round    (T x) = round x ; \
-   ceiling  (T x) = ceiling x ; \
-   floor    (T x) = floor x }
-
-#define INSTANCE_REALFLOAT(T) \
-instance RealFloat T where { \
-   floatRadix     (T x) = floatRadix x ; \
-   floatDigits    (T x) = floatDigits x ; \
-   floatRange     (T x) = floatRange x ; \
-   decodeFloat    (T x) = decodeFloat x ; \
-   encodeFloat m n      = T (encodeFloat m n) ; \
-   exponent       (T x) = exponent x ; \
-   significand    (T x) = T (significand  x) ; \
-   scaleFloat n   (T x) = T (scaleFloat n x) ; \
-   isNaN          (T x) = isNaN x ; \
-   isInfinite     (T x) = isInfinite x ; \
-   isDenormalized (T x) = isDenormalized x ; \
-   isNegativeZero (T x) = isNegativeZero x ; \
-   isIEEE         (T x) = isIEEE x ; \
-   (T x) `atan2`  (T y) = T (x `atan2` y) }
-
-#define INSTANCE_STORABLE(T) \
-instance Storable T where { \
-   sizeOf    (T x)       = sizeOf x ; \
-   alignment (T x)       = alignment x ; \
-   peekElemOff a i       = liftM T (peekElemOff (castPtr a) i) ; \
-   pokeElemOff a i (T x) = pokeElemOff (castPtr a) i x }
-
-#else /* __GLASGOW_HASKELL__ */
-
---  // GHC can derive any class for a newtype, so we make use of that here...
-
-#define ARITHMETIC_CLASSES  Eq,Ord,Num,Enum,Storable,Real
-#define INTEGRAL_CLASSES Bounded,Integral,Bits
-#define FLOATING_CLASSES Fractional,Floating,RealFrac,RealFloat
-
-#define ARITHMETIC_TYPE(T,C,S,B) \
-newtype T = T B deriving (ARITHMETIC_CLASSES); \
-INSTANCE_READ(T,B); \
-INSTANCE_SHOW(T,B); \
-INSTANCE_TYPEABLE0(T,C,S) ;
-
-#define INTEGRAL_TYPE(T,C,S,B) \
-newtype T = T B deriving (ARITHMETIC_CLASSES, INTEGRAL_CLASSES); \
-INSTANCE_READ(T,B); \
-INSTANCE_SHOW(T,B); \
-INSTANCE_TYPEABLE0(T,C,S) ;
-
-#define FLOATING_TYPE(T,C,S,B) \
-newtype T = T B deriving (ARITHMETIC_CLASSES, FLOATING_CLASSES); \
-INSTANCE_READ(T,B); \
-INSTANCE_SHOW(T,B); \
-INSTANCE_TYPEABLE0(T,C,S) ;
-
-#define INSTANCE_READ(T,B) \
-instance Read T where { \
-   readsPrec            = unsafeCoerce# (readsPrec :: Int -> ReadS B); \
-   readList             = unsafeCoerce# (readList  :: ReadS [B]); }
-
-#define INSTANCE_SHOW(T,B) \
-instance Show T where { \
-   showsPrec            = unsafeCoerce# (showsPrec :: Int -> B -> ShowS); \
-   show                 = unsafeCoerce# (show :: B -> String); \
-   showList             = unsafeCoerce# (showList :: [B] -> ShowS); }
-
-#endif /* __GLASGOW_HASKELL__ */
-
-#endif
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/include/HsBase.h b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/include/HsBase.h
deleted file mode 100644
--- a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/include/HsBase.h
+++ /dev/null
@@ -1,757 +0,0 @@
-/* -----------------------------------------------------------------------------
- *
- * (c) The University of Glasgow 2001-2004
- *
- * Definitions for package `base' which are visible in Haskell land.
- *
- * Adapted for use in EHC
- *
- * ---------------------------------------------------------------------------*/
-
-#ifndef __HSBASE_H__
-#define __HSBASE_H__
-
-#include "HsBaseConfig.h"
-#ifdef __UHC_BUILDS_O__
-#include "rts.h"
-#endif
-
-/* ultra-evil... */
-#undef PACKAGE_BUGREPORT
-#undef PACKAGE_NAME
-#undef PACKAGE_STRING
-#undef PACKAGE_TARNAME
-#undef PACKAGE_VERSION
-
-/* Needed to get the macro version of errno on some OSs (eg. Solaris).
-   We must do this, because these libs are only compiled once, but
-   must work in both single-threaded and multi-threaded programs. */
-#define _REENTRANT 1
-
-#ifndef __UHC__
-#include "HsFFI.h"
-#endif /* !__UHC__ */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <math.h>
-
-#if HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#if HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif
-#if HAVE_FCNTL_H
-# include <fcntl.h>
-#endif
-#if HAVE_TERMIOS_H
-#include <termios.h>
-#endif
-#if HAVE_SIGNAL_H
-#include <signal.h>
-/* Ultra-ugly: OpenBSD uses broken macros for sigemptyset and sigfillset (missing casts) */
-#if __OpenBSD__
-#undef sigemptyset
-#undef sigfillset
-#endif
-#endif
-#if HAVE_ERRNO_H
-#include <errno.h>
-#endif
-#if HAVE_STRING_H
-#include <string.h>
-#endif
-#if HAVE_DIRENT_H
-#include <dirent.h>
-#endif
-#if HAVE_UTIME_H
-#include <utime.h>
-#endif
-#if HAVE_SYS_UTSNAME_H
-#include <sys/utsname.h>
-#endif
-#if HAVE_GETTIMEOFDAY
-#  if HAVE_SYS_TIME_H
-#   include <sys/time.h>
-#  endif
-#elif HAVE_GETCLOCK
-# if HAVE_SYS_TIMERS_H
-#  define POSIX_4D9 1
-#  include <sys/timers.h>
-# endif
-#endif
-#if HAVE_TIME_H
-#include <time.h>
-#endif
-#if HAVE_SYS_TIMEB_H
-#include <sys/timeb.h>
-#endif
-#if HAVE_WINDOWS_H
-#include <windows.h>
-#endif
-#if HAVE_SYS_TIMES_H
-#include <sys/times.h>
-#endif
-#if HAVE_WINSOCK_H && defined(__MINGW32__)
-#include <winsock.h>
-#endif
-#if HAVE_LIMITS_H
-#include <limits.h>
-#endif
-#if HAVE_WCTYPE_H
-#include <wctype.h>
-#endif
-#if HAVE_INTTYPES_H
-# include <inttypes.h>
-#elif HAVE_STDINT_H
-# include <stdint.h>
-#endif
-
-#if !defined(__MINGW32__) && !defined(irix_HOST_OS)
-# if HAVE_SYS_RESOURCE_H
-#  include <sys/resource.h>
-# endif
-#endif
-
-#if !HAVE_GETRUSAGE && HAVE_SYS_SYSCALL_H
-# include <sys/syscall.h>
-# if defined(SYS_GETRUSAGE)	/* hpux_HOST_OS */
-#  define getrusage(a, b)  syscall(SYS_GETRUSAGE, a, b)
-#  define HAVE_GETRUSAGE 1
-# endif
-#endif
-
-/* For System */
-#if HAVE_SYS_WAIT_H
-#include <sys/wait.h>
-#endif
-#if HAVE_VFORK_H
-#include <vfork.h>
-#endif
-
-#ifndef __UHC__
-#include "dirUtils.h"
-#endif
-#ifndef __UHC__
-#include "WCsubst.h"
-#endif /* !__UHC__ */
-
-#if defined(__MINGW32__)
-/* in Win32Utils.c */
-extern void maperrno (void);
-extern HsWord64 getUSecOfDay(void);
-#endif
-
-#if defined(__MINGW32__)
-#include <io.h>
-#include <fcntl.h>
-#include <shlobj.h>
-#include <share.h>
-#endif
-
-#if HAVE_SYS_SELECT_H
-#include <sys/select.h>
-#endif
-
-/* in inputReady.c */
-extern int fdReady(int fd, int write, int msecs, int isSock);
-
-#ifndef __UHC__
-/* in Signals.c */
-extern HsInt nocldstop;
-#endif /* !__UHC__ */
-
-#ifndef __UHC__
-/* -----------------------------------------------------------------------------
-   64-bit operations, defined in longlong.c
-   -------------------------------------------------------------------------- */
-
-#ifdef SUPPORT_LONG_LONGS
-
-HsBool hs_gtWord64 (HsWord64, HsWord64);
-HsBool hs_geWord64 (HsWord64, HsWord64);
-HsBool hs_eqWord64 (HsWord64, HsWord64);
-HsBool hs_neWord64 (HsWord64, HsWord64);
-HsBool hs_ltWord64 (HsWord64, HsWord64);
-HsBool hs_leWord64 (HsWord64, HsWord64);
-
-HsBool hs_gtInt64 (HsInt64, HsInt64);
-HsBool hs_geInt64 (HsInt64, HsInt64);
-HsBool hs_eqInt64 (HsInt64, HsInt64);
-HsBool hs_neInt64 (HsInt64, HsInt64);
-HsBool hs_ltInt64 (HsInt64, HsInt64);
-HsBool hs_leInt64 (HsInt64, HsInt64);
-
-HsWord64 hs_remWord64  (HsWord64, HsWord64);
-HsWord64 hs_quotWord64 (HsWord64, HsWord64);
-
-HsInt64 hs_remInt64    (HsInt64, HsInt64);
-HsInt64 hs_quotInt64   (HsInt64, HsInt64);
-HsInt64 hs_negateInt64 (HsInt64);
-HsInt64 hs_plusInt64   (HsInt64, HsInt64);
-HsInt64 hs_minusInt64  (HsInt64, HsInt64);
-HsInt64 hs_timesInt64  (HsInt64, HsInt64);
-
-HsWord64 hs_and64  (HsWord64, HsWord64);
-HsWord64 hs_or64   (HsWord64, HsWord64);
-HsWord64 hs_xor64  (HsWord64, HsWord64);
-HsWord64 hs_not64  (HsWord64);
-
-HsWord64 hs_uncheckedShiftL64   (HsWord64, HsInt);
-HsWord64 hs_uncheckedShiftRL64  (HsWord64, HsInt);
-HsInt64  hs_uncheckedIShiftL64  (HsInt64, HsInt);
-HsInt64  hs_uncheckedIShiftRA64 (HsInt64, HsInt);
-HsInt64  hs_uncheckedIShiftRL64 (HsInt64, HsInt);
-
-HsInt64  hs_intToInt64    (HsInt);
-HsInt    hs_int64ToInt    (HsInt64);
-HsWord64 hs_int64ToWord64 (HsInt64);
-HsWord64 hs_wordToWord64  (HsWord);
-HsWord   hs_word64ToWord  (HsWord64);
-HsInt64  hs_word64ToInt64 (HsWord64);
-
-HsWord64 hs_integerToWord64 (HsInt sa, StgByteArray /* Really: mp_limb_t* */ da);
-HsInt64  hs_integerToInt64 (HsInt sa, StgByteArray /* Really: mp_limb_t* */ da);
-
-#endif /* SUPPORT_LONG_LONGS */
-#endif /* !__UHC__ */
-
-/* -----------------------------------------------------------------------------
-   INLINE functions.
-
-   These functions are given as inlines here for when compiling via C,
-   but we also generate static versions into the cbits library for
-   when compiling to native code.
-   -------------------------------------------------------------------------- */
-
-#ifndef INLINE
-# if defined(_MSC_VER)
-#  define INLINE extern __inline
-# else
-#  define INLINE static inline
-# endif
-#endif
-
-INLINE int __hscore_get_errno(void) { return errno; }
-INLINE void __hscore_set_errno(int e) { errno = e; }
-
-#if !defined(_MSC_VER)
-INLINE int __hscore_s_isreg(mode_t m)  { return S_ISREG(m);  }
-INLINE int __hscore_s_isdir(mode_t m)  { return S_ISDIR(m);  }
-INLINE int __hscore_s_isfifo(mode_t m) { return S_ISFIFO(m); }
-INLINE int __hscore_s_isblk(mode_t m)  { return S_ISBLK(m);  }
-INLINE int __hscore_s_ischr(mode_t m)  { return S_ISCHR(m);  }
-#if !defined(mingw32_HOST_OS) && !defined(__MINGW32__)
-INLINE int __hscore_s_issock(mode_t m) { return S_ISSOCK(m); }
-#endif
-#endif
-
-#if ( !defined(_MSC_VER) && !defined(__MINGW32__) && !defined(_WIN32) ) || defined(__CYGWIN__)
-INLINE int
-__hscore_sigemptyset( sigset_t *set )
-{ return sigemptyset(set); }
-
-INLINE int
-__hscore_sigfillset( sigset_t *set )
-{ return sigfillset(set); }
-
-INLINE int
-__hscore_sigaddset( sigset_t * set, int s )
-{ return sigaddset(set,s); }
-
-INLINE int
-__hscore_sigdelset( sigset_t * set, int s )
-{ return sigdelset(set,s); }
-
-INLINE int
-__hscore_sigismember( sigset_t * set, int s )
-{ return sigismember(set,s); }
-#endif
-
-INLINE void *
-__hscore_memcpy_dst_off( char *dst, int dst_off, char *src, size_t sz )
-{ return memcpy(dst+dst_off, src, sz); }
-
-INLINE void *
-__hscore_memcpy_src_off( char *dst, char *src, int src_off, size_t sz )
-{ return memcpy(dst, src+src_off, sz); }
-
-INLINE HsBool
-__hscore_supportsTextMode()
-{
-#if defined(_MSC_VER) || defined(__MINGW32__) || defined(_WIN32)
-  return HS_BOOL_FALSE;
-#else
-  return HS_BOOL_TRUE;
-#endif
-}
-
-INLINE HsInt
-__hscore_bufsiz()
-{
-  return BUFSIZ;
-}
-
-INLINE int
-__hscore_seek_cur()
-{
-  return SEEK_CUR;
-}
-
-INLINE int
-__hscore_o_binary()
-{
-#if defined(_MSC_VER)
-  return O_BINARY;
-#else
-  return CONST_O_BINARY;
-#endif
-}
-
-INLINE int
-__hscore_o_rdonly()
-{
-#ifdef O_RDONLY
-  return O_RDONLY;
-#else
-  return 0;
-#endif
-}
-
-INLINE int
-__hscore_o_wronly( void )
-{
-#ifdef O_WRONLY
-  return O_WRONLY;
-#else
-  return 0;
-#endif
-}
-
-INLINE int
-__hscore_o_rdwr( void )
-{
-#ifdef O_RDWR
-  return O_RDWR;
-#else
-  return 0;
-#endif
-}
-
-INLINE int
-__hscore_o_append( void )
-{
-#ifdef O_APPEND
-  return O_APPEND;
-#else
-  return 0;
-#endif
-}
-
-INLINE int
-__hscore_o_creat( void )
-{
-#ifdef O_CREAT
-  return O_CREAT;
-#else
-  return 0;
-#endif
-}
-
-INLINE int
-__hscore_o_excl( void )
-{
-#ifdef O_EXCL
-  return O_EXCL;
-#else
-  return 0;
-#endif
-}
-
-INLINE int
-__hscore_o_trunc( void )
-{
-#ifdef O_TRUNC
-  return O_TRUNC;
-#else
-  return 0;
-#endif
-}
-
-INLINE int
-__hscore_o_noctty( void )
-{
-#ifdef O_NOCTTY
-  return O_NOCTTY;
-#else
-  return 0;
-#endif
-}
-
-INLINE int
-__hscore_o_nonblock( void )
-{
-#ifdef O_NONBLOCK
-  return O_NONBLOCK;
-#else
-  return 0;
-#endif
-}
-
-INLINE int
-__hscore_seek_set( void )
-{
-  return SEEK_SET;
-}
-
-INLINE int
-__hscore_seek_end( void )
-{
-  return SEEK_END;
-}
-
-INLINE int
-__hscore_ftruncate( int fd, off_t where )
-{
-#if defined(HAVE_FTRUNCATE)
-  return ftruncate(fd,where);
-#elif defined(HAVE__CHSIZE)
-  return _chsize(fd,where);
-#else
-// ToDo: we should use _chsize_s() on Windows which allows a 64-bit
-// offset, but it doesn't seem to be available from mingw at this time 
-// --SDM (01/2008)
-#error at least ftruncate or _chsize functions are required to build
-#endif
-}
-
-#ifndef __UHC__
-INLINE int
-__hscore_setmode( int fd, HsBool toBin )
-{
-#if defined(_MSC_VER) || defined(__MINGW32__) || defined(_WIN32)
-  return setmode(fd,(toBin == HS_BOOL_TRUE) ? _O_BINARY : _O_TEXT);
-#else
-  return 0;
-#endif
-}
-#endif /* !__UHC__ */
-
-#if __GLASGOW_HASKELL__
-
-INLINE int
-__hscore_PrelHandle_write( int fd, void *ptr, HsInt off, int sz )
-{
-  return write(fd,(char *)ptr + off, sz);
-}
-
-INLINE int
-__hscore_PrelHandle_read( int fd, void *ptr, HsInt off, int sz )
-{
-  return read(fd,(char *)ptr + off, sz);
-
-}
-
-#if defined(_MSC_VER) || defined(__MINGW32__) || defined(_WIN32)
-INLINE int
-__hscore_PrelHandle_send( int fd, void *ptr, HsInt off, int sz )
-{
-    return send(fd,(char *)ptr + off, sz, 0);
-}
-
-INLINE int
-__hscore_PrelHandle_recv( int fd, void *ptr, HsInt off, int sz )
-{
-    return recv(fd,(char *)ptr + off, sz, 0);
-}
-#endif
-
-#endif /* __GLASGOW_HASKELL__ */
-
-INLINE int
-__hscore_mkdir( char *pathName, int mode )
-{
-#if ( defined(_MSC_VER) || defined(__MINGW32__) || defined(_WIN32) ) && !defined(__CYGWIN__)
-  return mkdir(pathName);
-#else
-  return mkdir(pathName,mode);
-#endif
-}
-
-INLINE int
-__hscore_lstat( const char *fname, struct stat *st )
-{
-#if HAVE_LSTAT
-  return lstat(fname, st);
-#else
-  return stat(fname, st);
-#endif
-}
-
-INLINE char *
-__hscore_d_name( struct dirent* d )
-{
-  return (d->d_name);
-}
-
-INLINE int
-__hscore_end_of_dir( void )
-{
-  return READDIR_ERRNO_EOF;
-}
-
-INLINE void
-__hscore_free_dirent(struct dirent *dEnt)
-{
-#if HAVE_READDIR_R
-  free(dEnt);
-#endif
-}
-
-#if defined(__MINGW32__)
-// We want the versions of stat/fstat/lseek that use 64-bit offsets,
-// and you have to ask for those explicitly.  Unfortunately there
-// doesn't seem to be a 64-bit version of truncate/ftruncate, so while
-// hFileSize and hSeek will work with large files, hSetFileSize will not.
-#define stat(file,buf)       _stati64(file,buf)
-#define fstat(fd,buf)        _fstati64(fd,buf)
-typedef struct _stati64 struct_stat;
-typedef off64_t stsize_t;
-#else
-typedef struct stat struct_stat;
-typedef off_t stsize_t;
-#endif
-
-INLINE HsInt
-__hscore_sizeof_stat( void )
-{
-  return sizeof(struct_stat);
-}
-
-INLINE time_t __hscore_st_mtime ( struct_stat* st ) { return st->st_mtime; }
-INLINE stsize_t __hscore_st_size  ( struct_stat* st ) { return st->st_size; }
-#if !defined(_MSC_VER)
-INLINE mode_t __hscore_st_mode  ( struct_stat* st ) { return st->st_mode; }
-INLINE dev_t  __hscore_st_dev  ( struct_stat* st ) { return st->st_dev; }
-INLINE ino_t  __hscore_st_ino  ( struct_stat* st ) { return st->st_ino; }
-#endif
-
-#if HAVE_TERMIOS_H
-INLINE tcflag_t __hscore_lflag( struct termios* ts ) { return ts->c_lflag; }
-
-INLINE void
-__hscore_poke_lflag( struct termios* ts, tcflag_t t ) { ts->c_lflag = t; }
-
-INLINE unsigned char*
-__hscore_ptr_c_cc( struct termios* ts )
-{ return (unsigned char*) &ts->c_cc; }
-
-INLINE HsInt
-__hscore_sizeof_termios( void )
-{
-#ifndef __MINGW32__
-  return sizeof(struct termios);
-#else
-  return 0;
-#endif
-}
-#endif
-
-//sizeof_sigset_t is also use on windows systems which define tcflat_t. Why exclude it?
-// #if !defined(_MSC_VER) && !defined(__MINGW32__) && !defined(_WIN32)
-INLINE HsInt
-__hscore_sizeof_sigset_t( void )
-{
-  return sizeof(sigset_t);
-}
-// #endif
-
-INLINE int
-__hscore_echo( void )
-{
-#ifdef ECHO
-  return ECHO;
-#else
-  return 0;
-#endif
-
-}
-
-INLINE int
-__hscore_tcsanow( void )
-{
-#ifdef TCSANOW
-  return TCSANOW;
-#else
-  return 0;
-#endif
-
-}
-
-INLINE int
-__hscore_icanon( void )
-{
-#ifdef ICANON
-  return ICANON;
-#else
-  return 0;
-#endif
-}
-
-INLINE int __hscore_vmin( void )
-{
-#ifdef VMIN
-  return VMIN;
-#else
-  return 0;
-#endif
-}
-
-INLINE int __hscore_vtime( void )
-{
-#ifdef VTIME
-  return VTIME;
-#else
-  return 0;
-#endif
-}
-
-INLINE int __hscore_sigttou( void )
-{
-#ifdef SIGTTOU
-  return SIGTTOU;
-#else
-  return 0;
-#endif
-}
-
-INLINE int __hscore_sig_block( void )
-{
-#ifdef SIG_BLOCK
-  return SIG_BLOCK;
-#else
-  return 0;
-#endif
-}
-
-INLINE int __hscore_sig_setmask( void )
-{
-#ifdef SIG_SETMASK
-  return SIG_SETMASK;
-#else
-  return 0;
-#endif
-}
-
-INLINE int
-__hscore_f_getfl( void )
-{
-#ifdef F_GETFL
-  return F_GETFL;
-#else
-  return 0;
-#endif
-}
-
-INLINE int
-__hscore_f_setfl( void )
-{
-#ifdef F_SETFL
-  return F_SETFL;
-#else
-  return 0;
-#endif
-}
-
-// defined in rts/RtsStartup.c.
-extern void* __hscore_get_saved_termios(int fd);
-extern void __hscore_set_saved_termios(int fd, void* ts);
-
-INLINE int __hscore_hs_fileno (FILE *f) { return fileno (f); }
-
-INLINE int __hscore_open(char *file, int how, mode_t mode) {
-#ifdef __MINGW32__
-	if ((how & O_WRONLY) || (how & O_RDWR) || (how & O_APPEND))
-	  return _sopen(file,how,_SH_DENYRW,mode);
-	else
-	  return _sopen(file,how,_SH_DENYWR,mode);
-#else
-	return open(file,how,mode);
-#endif
-}
-
-// These are wrapped because on some OSs (eg. Linux) they are
-// macros which redirect to the 64-bit-off_t versions when large file
-// support is enabled.
-//
-#if defined(__MINGW32__)
-INLINE off64_t __hscore_lseek(int fd, off64_t off, int whence) {
-	return (_lseeki64(fd,off,whence));
-}
-#else
-INLINE off_t __hscore_lseek(int fd, off_t off, int whence) {
-	return (lseek(fd,off,whence));
-}
-#endif
-
-INLINE HsInt __hscore_stat(char *file, struct_stat *buf) {
-	return (stat(file,buf));
-}
-
-INLINE HsInt __hscore_fstat(int fd, struct_stat *buf) {
-	return (fstat(fd,buf));
-}
-
-// select-related stuff
-
-#if !defined(__MINGW32__)
-INLINE int  hsFD_SETSIZE(void) { return FD_SETSIZE; }
-INLINE int  hsFD_ISSET(int fd, fd_set *fds) { return FD_ISSET(fd, fds); }
-INLINE void hsFD_SET(int fd, fd_set *fds) { FD_SET(fd, fds); }
-INLINE HsInt sizeof_fd_set(void) { return sizeof(fd_set); }
-extern void hsFD_ZERO(fd_set *fds);
-#endif
-
-// gettimeofday()-related
-
-#if !defined(__MINGW32__)
-
-INLINE HsInt sizeofTimeVal(void) { return sizeof(struct timeval); }
-
-INLINE HsWord64 getUSecOfDay(void)
-{
-    struct timeval tv;
-    gettimeofday(&tv, (struct timezone *) NULL);
-    // Don't forget to cast *before* doing the arithmetic, otherwise
-    // the arithmetic happens at the type of tv_sec, which is probably
-    // only 'int'.
-    return ((HsWord64)tv.tv_sec * 1000000 + (HsWord64)tv.tv_usec);
-}
-
-INLINE void setTimevalTicks(struct timeval *p, HsWord64 usecs)
-{
-    p->tv_sec  = usecs / 1000000;
-    p->tv_usec = usecs % 1000000;
-}
-#endif /* !defined(__MINGW32__) */
-
-/* ToDo: write a feature test that doesn't assume 'environ' to
- *    be in scope at link-time. */
-extern char** environ;
-INLINE char **__hscore_environ() { return environ; }
-
-/* lossless conversions between pointers and integral types */
-INLINE void *    __hscore_from_uintptr(uintptr_t n) { return (void *)n; }
-INLINE void *    __hscore_from_intptr (intptr_t n)  { return (void *)n; }
-INLINE uintptr_t __hscore_to_uintptr  (void *p)     { return (uintptr_t)p; }
-INLINE intptr_t  __hscore_to_intptr   (void *p)     { return (intptr_t)p; }
-
-void errorBelch2(const char*s, char *t);
-void debugBelch2(const char*s, char *t);
-
-#endif /* __HSBASE_H__ */
-
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/include/HsBaseConfig.h b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/include/HsBaseConfig.h
deleted file mode 100644
--- a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/include/HsBaseConfig.h
+++ /dev/null
@@ -1,944 +0,0 @@
-/* ehclib/uhcbase/include/HsBaseConfig.h.  Generated from HsBaseConfig.h.in by configure.  */
-#ifndef HSBASECONFIG_H
-#define HSBASECONFIG_H
-
-#include "MachDeps.h"
-
-/********************************************************************/
-/**** Sizes                                                      ****/
-/********************************************************************/
-
-#if SIZEOF_INTPTR_T == 8
-#define HTYPE_INTPTR_T 			Int64
-#define HTYPE_UINTPTR_T 		Word64
-#else
-#define HTYPE_INTPTR_T 			Int32
-#define HTYPE_UINTPTR_T 		Word32
-#endif
-
-/* also here: typedef int sig_atomic_t
- */
-#if SIZEOF_INT == 8
-#define HTYPE_INT 				Int64
-#define HTYPE_UNSIGNED_INT 		Word64
-#define HTYPE_SIG_ATOMIC_T 		Word64
-#else
-#define HTYPE_INT 				Int32
-#define HTYPE_UNSIGNED_INT 		Word32
-#define HTYPE_SIG_ATOMIC_T 		Word32
-#endif
-
-#if SIZEOF_LONG == 8
-#define HTYPE_LONG 				Int64
-#define HTYPE_UNSIGNED_LONG 	Word64
-#else
-#define HTYPE_LONG 				Int32
-#define HTYPE_UNSIGNED_LONG 	Word32
-#endif
-
-#if SIZEOF_VOID_P == 8
-#define HTYPE_PTRDIFF_T 		Int64
-#else
-#define HTYPE_PTRDIFF_T 		Int32
-#endif
-
-#if SIZEOF_CLOCK_T == 8
-#define HTYPE_CLOCK_T 			Word64
-#else
-#define HTYPE_CLOCK_T 			Word32
-#endif
-
-#if SIZEOF_TIME_T == 8
-#define HTYPE_TIME_T 			Word64
-#else
-#define HTYPE_TIME_T 			Word32
-#endif
-
-#if SIZEOF_USECONDS_T == 8
-#define HTYPE_USECONDS_T 		Word64
-#else
-#define HTYPE_USECONDS_T 		Word32
-#endif
-
-#if SIZEOF_SIZE_T == 8
-#define HTYPE_SIZE_T 			Word64
-#else
-#define HTYPE_SIZE_T 			Word32
-#endif
-
-#if SIZEOF_WCHAR_T == 1
-#define HTYPE_WCHAR_T 			Word8
-#elif SIZEOF_WCHAR_T == 2
-#define HTYPE_WCHAR_T 			Word16
-#else
-#define HTYPE_WCHAR_T 			Word32
-#endif
-
-
-
-/* Define to Haskell type for char */
-#define HTYPE_CHAR Int8
-
-/* Define to Haskell type for double */
-#define HTYPE_DOUBLE Double
-
-/* Define to Haskell type for float */
-#define HTYPE_FLOAT Float
-
-/* Define to Haskell type for intmax_t */
-#define HTYPE_INTMAX_T Int64
-
-/* Define to Haskell type for long long */
-#define HTYPE_LONG_LONG Int64
-
-/* Define to Haskell type for short */
-#define HTYPE_SHORT Int16
-
-/* Define to Haskell type for signed char */
-#define HTYPE_SIGNED_CHAR Int8
-
-/* Define to Haskell type for uintmax_t */
-#define HTYPE_UINTMAX_T Word64
-
-/* Define to Haskell type for unsigned char */
-#define HTYPE_UNSIGNED_CHAR Word8
-
-/* Define to Haskell type for unsigned long long */
-#define HTYPE_UNSIGNED_LONG_LONG Word64
-
-/* Define to Haskell type for unsigned short */
-#define HTYPE_UNSIGNED_SHORT Word16
-
-
-
-/********************************************************************/
-/**** System tupes                                               ****/
-/********************************************************************/
-
-#ifdef SIZEOF_DEV_T
-# if SIZEOF_DEV_T == 8
-#  define HTYPE_DEV_T 			Word64
-# elif SIZEOF_DEV_T == 4
-#  define HTYPE_DEV_T 			Word32
-# elif SIZEOF_DEV_T == 2
-#  define HTYPE_DEV_T 			Word16
-# else
-# endif
-#endif
-
-#ifdef SIZEOF_INO_T
-# if SIZEOF_INO_T == 8
-#  define HTYPE_INO_T 			Word64
-# elif SIZEOF_INO_T == 4
-#  define HTYPE_INO_T 			Word32
-# elif SIZEOF_INO_T == 2
-#  define HTYPE_INO_T 			Word16
-# else
-# endif
-#endif
-
-#ifdef SIZEOF_MODE_T
-# if SIZEOF_MODE_T == 8
-#  define HTYPE_MODE_T 			Word64
-# elif SIZEOF_MODE_T == 4
-#  define HTYPE_MODE_T 			Word32
-# elif SIZEOF_MODE_T == 2
-#  define HTYPE_MODE_T 			Word16
-# else
-# endif
-#endif
-
-#ifdef SIZEOF_OFF_T
-# if SIZEOF_OFF_T == 8
-#  define HTYPE_OFF_T 			Word64
-# elif SIZEOF_OFF_T == 4
-#  define HTYPE_OFF_T 			Word32
-# elif SIZEOF_OFF_T == 2
-#  define HTYPE_OFF_T 			Word16
-# else
-# endif
-#endif
-
-#ifdef SIZEOF_PID_T
-# if SIZEOF_PID_T == 8
-#  define HTYPE_PID_T 			Word64
-# elif SIZEOF_PID_T == 4
-#  define HTYPE_PID_T 			Word32
-# elif SIZEOF_PID_T == 2
-#  define HTYPE_PID_T 			Word16
-# else
-# endif
-#endif
-
-#ifdef SIZEOF_SSIZE_T
-# if SIZEOF_SSIZE_T == 8
-#  define HTYPE_SSIZE_T 			Word64
-# elif SIZEOF_SSIZE_T == 4
-#  define HTYPE_SSIZE_T 			Word32
-# elif SIZEOF_SSIZE_T == 2
-#  define HTYPE_SSIZE_T 			Word16
-# else
-# endif
-#endif
-
-#ifdef SIZEOF_GID_T
-# if SIZEOF_GID_T == 8
-#  define HTYPE_GID_T 			Word64
-# elif SIZEOF_GID_T == 4
-#  define HTYPE_GID_T 			Word32
-# elif SIZEOF_GID_T == 2
-#  define HTYPE_GID_T 			Word16
-# else
-# endif
-#endif
-
-#ifdef SIZEOF_NLINK_T
-# if SIZEOF_NLINK_T == 8
-#  define HTYPE_NLINK_T 			Word64
-# elif SIZEOF_NLINK_T == 4
-#  define HTYPE_NLINK_T 			Word32
-# elif SIZEOF_NLINK_T == 2
-#  define HTYPE_NLINK_T 			Word16
-# else
-# endif
-#endif
-
-#ifdef SIZEOF_UID_T
-# if SIZEOF_UID_T == 8
-#  define HTYPE_UID_T 			Word64
-# elif SIZEOF_UID_T == 4
-#  define HTYPE_UID_T 			Word32
-# elif SIZEOF_UID_T == 2
-#  define HTYPE_UID_T 			Word16
-# else
-# endif
-#endif
-
-#ifdef SIZEOF_CC_T
-# if SIZEOF_CC_T == 8
-#  define HTYPE_CC_T 			Word64
-# elif SIZEOF_CC_T == 4
-#  define HTYPE_CC_T 			Word32
-# elif SIZEOF_CC_T == 2
-#  define HTYPE_CC_T 			Word16
-# else
-# endif
-#endif
-
-#ifdef SIZEOF_SPEED_T
-# if SIZEOF_SPEED_T == 8
-#  define HTYPE_SPEED_T 			Word64
-# elif SIZEOF_SPEED_T == 4
-#  define HTYPE_SPEED_T 			Word32
-# elif SIZEOF_SPEED_T == 2
-#  define HTYPE_SPEED_T 			Word16
-# else
-# endif
-#endif
-
-#ifdef SIZEOF_TCFLAG_T
-# if SIZEOF_TCFLAG_T == 8
-#  define HTYPE_TCFLAG_T 			Word64
-# elif SIZEOF_TCFLAG_T == 4
-#  define HTYPE_TCFLAG_T 			Word32
-# elif SIZEOF_TCFLAG_T == 2
-#  define HTYPE_TCFLAG_T 			Word16
-# else
-# endif
-#endif
-
-#ifdef SIZEOF_RLIM_T
-# if SIZEOF_RLIM_T == 8
-#  define HTYPE_RLIM_T 			Word64
-# elif SIZEOF_RLIM_T == 4
-#  define HTYPE_RLIM_T 			Word32
-# elif SIZEOF_RLIM_T == 2
-#  define HTYPE_RLIM_T 			Word16
-# else
-# endif
-#endif
-
-/********************************************************************/
-/**** Presence of include files                                  ****/
-/********************************************************************/
-
-#define HAVE_DIRENT_H 1
-#define HAVE_ERRNO_H 1
-#define HAVE_FCNTL_H 1
-#define HAVE_INTTYPES_H 1
-#define HAVE_LIMITS_H 1
-#define HAVE_SIGNAL_H 1
-#define HAVE_STDINT_H 1
-#define HAVE_STRING_H 1
-#define HAVE_SYS_RESOURCE_H 1
-#define HAVE_SYS_SELECT_H 1
-#define HAVE_SYS_STAT_H 1
-#define HAVE_SYS_SYSCALL_H 1
-#define HAVE_SYS_TIME_H 1
-#define HAVE_SYS_TIMEB_H 1
-/* #undef HAVE_SYS_TIMERS_H */
-#define HAVE_SYS_TIMES_H 1
-#define HAVE_SYS_TYPES_H 1
-#define HAVE_SYS_UTSNAME_H 1
-#define HAVE_SYS_WAIT_H 1
-#define HAVE_TERMIOS_H 1
-#define HAVE_TIME_H 1
-#define HAVE_UNISTD_H 1
-#define HAVE_UTIME_H 1
-/* #undef HAVE_VFORK_H */
-#define HAVE_WCTYPE_H 1
-/* #undef HAVE_WINDOWS_H */
-/* #undef HAVE_WINSOCK_H */
-
-/* #undef HAVE__CHSIZE */
-#define HAVE_FTRUNCATE 1
-/* #undef HAVE_GETCLOCK */
-#define HAVE_GETRUSAGE 1
-#define HAVE_GETTIMEOFDAY 1
-#define HAVE_LSTAT 1
-#define HAVE_READDIR_R 1
-
-/********************************************************************/
-/**** Runtime types                                              ****/
-/********************************************************************/
-
-#ifdef __UHC_BUILDS_O__
-
-#if defined(__UHC_TARGET_BC__) || defined(__UHC_TARGET_C__)
-// # define HsBool				Word
-// # define HsInt				Word
-// # define HsWord64			Word64
-// # define HsWord32			Word32
-// # define HsWord16			Word16
-// # define HsWord8			Word8
-// # ifdef __UHC_TARGET_BC__
-// #  define HS_BOOL_FALSE		gb_False
-// #  define HS_BOOL_TRUE		gb_True
-// # else
-// #  define HS_BOOL_FALSE		0
-// #  define HS_BOOL_TRUE		1
-// # endif
-#endif /* __UHC_TARGET_BC__ */
-
-#endif /* __UHC_BUILDS_O__ */
-
-/********************************************************************/
-/**** Read dir EOF error                                         ****/
-/********************************************************************/
-
-/* See remarks in GHC, libraries/base/aclocal.m4: MinGW platform returns non 0 value. We ignore that */
-#define	READDIR_ERRNO_EOF	0
-
-/********************************************************************/
-/**** C errors                                                   ****/
-/********************************************************************/
-
-/* (1) Assume errno.h is already included */
-/* (2) Error codes like EADV are not present on all platforms, so a dummy value is provided, this should be done for all codes */
-
-/* The value of E2BIG. */
-#if !defined(E2BIG)
-#define E2BIG 10000
-#endif
-#define CONST_E2BIG E2BIG
-
-/* The value of EACCES. */
-#if !defined(EACCES)
-#define EACCES 10000
-#endif
-#define CONST_EACCES EACCES
-
-/* The value of EADDRINUSE. */
-#if !defined(EADDRINUSE)
-#define EADDRINUSE 10000
-#endif
-#define CONST_EADDRINUSE EADDRINUSE
-
-/* The value of EADDRNOTAVAIL. */
-#define CONST_EADDRNOTAVAIL EADDRNOTAVAIL
-
-/* The value of EADV. */
-#if !defined(EADV)
-#define EADV 10000
-#endif
-#define CONST_EADV EADV
-
-/* The value of EAFNOSUPPORT. */
-#if !defined(EAFNOSUPPORT)
-#define EAFNOSUPPORT 10000
-#endif
-#define CONST_EAFNOSUPPORT EAFNOSUPPORT
-
-/* The value of EAGAIN. */
-#if !defined(EAGAIN)
-#define EAGAIN 10000
-#endif
-#define CONST_EAGAIN EAGAIN
-
-/* The value of EALREADY. */
-#if !defined(EALREADY)
-#define EALREADY 10000
-#endif
-#define CONST_EALREADY EALREADY
-
-/* The value of EBADF. */
-#if !defined(EBADF)
-#define EBADF 10000
-#endif
-#define CONST_EBADF EBADF
-
-/* The value of EBADMSG. */
-#if !defined(EBADMSG)
-#define EBADMSG 10000
-#endif
-#define CONST_EBADMSG EBADMSG
-
-/* The value of EBADRPC. */
-#if !defined(EBADRPC)
-#define EBADRPC 10000
-#endif
-#define CONST_EBADRPC EBADRPC
-
-/* The value of EBUSY. */
-#if !defined(EBUSY)
-#define EBUSY 10000
-#endif
-#define CONST_EBUSY EBUSY
-
-/* The value of ECHILD. */
-#if !defined(ECHILD)
-#define ECHILD 10000
-#endif
-#define CONST_ECHILD ECHILD
-
-/* The value of ECOMM. */
-#if !defined(ECOMM)
-#define ECOMM 10000
-#endif
-#define CONST_ECOMM ECOMM
-
-/* The value of ECONNABORTED. */
-#if !defined(ECONNABORTED)
-#define ECONNABORTED 10000
-#endif
-#define CONST_ECONNABORTED ECONNABORTED
-
-/* The value of ECONNREFUSED. */
-#if !defined(ECONNREFUSED)
-#define ECONNREFUSED 10000
-#endif
-#define CONST_ECONNREFUSED ECONNREFUSED
-
-/* The value of ECONNRESET. */
-#if !defined(ECONNRESET)
-#define ECONNRESET 10000
-#endif
-#define CONST_ECONNRESET ECONNRESET
-
-/* The value of EDEADLK. */
-#if !defined(EDEADLK)
-#define EDEADLK 10000
-#endif
-#define CONST_EDEADLK EDEADLK
-
-/* The value of EDESTADDRREQ. */
-#if !defined(EDESTADDRREQ)
-#define EDESTADDRREQ 10000
-#endif
-#define CONST_EDESTADDRREQ EDESTADDRREQ
-
-/* The value of EDIRTY. */
-#if !defined(EDIRTY)
-#define EDIRTY 10000
-#endif
-#define CONST_EDIRTY EDIRTY
-
-/* The value of EDOM. */
-#if !defined(EDOM)
-#define EDOM 10000
-#endif
-#define CONST_EDOM EDOM
-
-/* The value of EDQUOT. */
-#if !defined(EDQUOT)
-#define EDQUOT 10000
-#endif
-#define CONST_EDQUOT EDQUOT
-
-/* The value of EEXIST. */
-#if !defined(EEXIST)
-#define EEXIST 10000
-#endif
-#define CONST_EEXIST EEXIST
-
-/* The value of EFAULT. */
-#if !defined(EFAULT)
-#define EFAULT 10000
-#endif
-#define CONST_EFAULT EFAULT
-
-/* The value of EFBIG. */
-#if !defined(EFBIG)
-#define EFBIG 10000
-#endif
-#define CONST_EFBIG EFBIG
-
-/* The value of EFTYPE. */
-#if !defined(EFTYPE)
-#define EFTYPE 10000
-#endif
-#define CONST_EFTYPE EFTYPE
-
-/* The value of EHOSTDOWN. */
-#if !defined(EHOSTDOWN)
-#define EHOSTDOWN 10000
-#endif
-#define CONST_EHOSTDOWN EHOSTDOWN
-
-/* The value of EHOSTUNREACH. */
-#if !defined(EHOSTUNREACH)
-#define EHOSTUNREACH 10000
-#endif
-#define CONST_EHOSTUNREACH EHOSTUNREACH
-
-/* The value of EIDRM. */
-#if !defined(EIDRM)
-#define EIDRM 10000
-#endif
-#define CONST_EIDRM EIDRM
-
-/* The value of EILSEQ. */
-#if !defined(EILSEQ)
-#define EILSEQ 10000
-#endif
-#define CONST_EILSEQ EILSEQ
-
-/* The value of EINPROGRESS. */
-#if !defined(EINPROGRESS)
-#define EINPROGRESS 10000
-#endif
-#define CONST_EINPROGRESS EINPROGRESS
-
-/* The value of EINTR. */
-#if !defined(EINTR)
-#define EINTR 10000
-#endif
-#define CONST_EINTR EINTR
-
-/* The value of EINVAL. */
-#if !defined(EINVAL)
-#define EINVAL 10000
-#endif
-#define CONST_EINVAL EINVAL
-
-/* The value of EIO. */
-#if !defined(EIO)
-#define EIO 10000
-#endif
-#define CONST_EIO EIO
-
-/* The value of EISCONN. */
-#if !defined(EISCONN)
-#define EISCONN 10000
-#endif
-#define CONST_EISCONN EISCONN
-
-/* The value of EISDIR. */
-#if !defined(EISDIR)
-#define EISDIR 10000
-#endif
-#define CONST_EISDIR EISDIR
-
-/* The value of ELOOP. */
-#if !defined(ELOOP)
-#define ELOOP 10000
-#endif
-#define CONST_ELOOP ELOOP
-
-/* The value of EMFILE. */
-#if !defined(EMFILE)
-#define EMFILE 10000
-#endif
-#define CONST_EMFILE EMFILE
-
-/* The value of EMLINK. */
-#if !defined(EMLINK)
-#define EMLINK 10000
-#endif
-#define CONST_EMLINK EMLINK
-
-/* The value of EMSGSIZE. */
-#if !defined(EMSGSIZE)
-#define EMSGSIZE 10000
-#endif
-#define CONST_EMSGSIZE EMSGSIZE
-
-/* The value of EMULTIHOP. */
-#if !defined(EMULTIHOP)
-#define EMULTIHOP 10000
-#endif
-#define CONST_EMULTIHOP EMULTIHOP
-
-/* The value of ENAMETOOLONG. */
-#if !defined(ENAMETOOLONG)
-#define ENAMETOOLONG 10000
-#endif
-#define CONST_ENAMETOOLONG ENAMETOOLONG
-
-/* The value of ENETDOWN. */
-#if !defined(ENETDOWN)
-#define ENETDOWN 10000
-#endif
-#define CONST_ENETDOWN ENETDOWN
-
-/* The value of ENETRESET. */
-#if !defined(ENETRESET)
-#define ENETRESET 10000
-#endif
-#define CONST_ENETRESET ENETRESET
-
-/* The value of ENETUNREACH. */
-#if !defined(ENETUNREACH)
-#define ENETUNREACH 10000
-#endif
-#define CONST_ENETUNREACH ENETUNREACH
-
-/* The value of ENFILE. */
-#if !defined(ENFILE)
-#define ENFILE 10000
-#endif
-#define CONST_ENFILE ENFILE
-
-/* The value of ENOBUFS. */
-#if !defined(ENOBUFS)
-#define ENOBUFS 10000
-#endif
-#define CONST_ENOBUFS ENOBUFS
-
-/* The value of ENOCIGAR. */
-#if !defined(ENOCIGAR)
-#define ENOCIGAR 10000
-#endif
-#define CONST_ENOCIGAR ENOCIGAR
-
-/* The value of ENODATA. */
-#if !defined(ENODATA)
-#define ENODATA 10000
-#endif
-#define CONST_ENODATA ENODATA
-
-/* The value of ENODEV. */
-#if !defined(ENODEV)
-#define ENODEV 10000
-#endif
-#define CONST_ENODEV ENODEV
-
-/* The value of ENOENT. */
-#if !defined(ENOENT)
-#define ENOENT 10000
-#endif
-#define CONST_ENOENT ENOENT
-
-/* The value of ENOEXEC. */
-#if !defined(ENOEXEC)
-#define ENOEXEC 10000
-#endif
-#define CONST_ENOEXEC ENOEXEC
-
-/* The value of ENOLCK. */
-#if !defined(ENOLCK)
-#define ENOLCK 10000
-#endif
-#define CONST_ENOLCK ENOLCK
-
-/* The value of ENOLINK. */
-#if !defined(ENOLINK)
-#define ENOLINK 10000
-#endif
-#define CONST_ENOLINK ENOLINK
-
-/* The value of ENOMEM. */
-#if !defined(ENOMEM)
-#define ENOMEM 10000
-#endif
-#define CONST_ENOMEM ENOMEM
-
-/* The value of ENOMSG. */
-#if !defined(ENOMSG)
-#define ENOMSG 10000
-#endif
-#define CONST_ENOMSG ENOMSG
-
-/* The value of ENONET. */
-#if !defined(ENONET)
-#define ENONET 10000
-#endif
-#define CONST_ENONET ENONET
-
-/* The value of ENOPROTOOPT. */
-#if !defined(ENOPROTOOPT)
-#define ENOPROTOOPT 10000
-#endif
-#define CONST_ENOPROTOOPT ENOPROTOOPT
-
-/* The value of ENOSPC. */
-#if !defined(ENOSPC)
-#define ENOSPC 10000
-#endif
-#define CONST_ENOSPC ENOSPC
-
-/* The value of ENOSR. */
-#if !defined(ENOSR)
-#define ENOSR 10000
-#endif
-#define CONST_ENOSR ENOSR
-
-/* The value of ENOSTR. */
-#if !defined(ENOSTR)
-#define ENOSTR 10000
-#endif
-#define CONST_ENOSTR ENOSTR
-
-/* The value of ENOSYS. */
-#if !defined(ENOSYS)
-#define ENOSYS 10000
-#endif
-#define CONST_ENOSYS ENOSYS
-
-/* The value of ENOTBLK. */
-#if !defined(ENOTBLK)
-#define ENOTBLK 10000
-#endif
-#define CONST_ENOTBLK ENOTBLK
-
-/* The value of ENOTCONN. */
-#if !defined(ENOTCONN)
-#define ENOTCONN 10000
-#endif
-#define CONST_ENOTCONN ENOTCONN
-
-/* The value of ENOTDIR. */
-#if !defined(ENOTDIR)
-#define ENOTDIR 10000
-#endif
-#define CONST_ENOTDIR ENOTDIR
-
-/* The value of ENOTEMPTY. */
-#if !defined(ENOTEMPTY)
-#define ENOTEMPTY 10000
-#endif
-#define CONST_ENOTEMPTY ENOTEMPTY
-
-/* The value of ENOTSOCK. */
-#if !defined(ENOTSOCK)
-#define ENOTSOCK 10000
-#endif
-#define CONST_ENOTSOCK ENOTSOCK
-
-/* The value of ENOTTY. */
-#if !defined(ENOTTY)
-#define ENOTTY 10000
-#endif
-#define CONST_ENOTTY ENOTTY
-
-/* The value of ENXIO. */
-#if !defined(ENXIO)
-#define ENXIO 10000
-#endif
-#define CONST_ENXIO ENXIO
-
-/* The value of EOPNOTSUPP. */
-#if !defined(EOPNOTSUPP)
-#define EOPNOTSUPP 10000
-#endif
-#define CONST_EOPNOTSUPP EOPNOTSUPP
-
-/* The value of EPERM. */
-#if !defined(EPERM)
-#define EPERM 10000
-#endif
-#define CONST_EPERM EPERM
-
-/* The value of EPFNOSUPPORT. */
-#if !defined(EPFNOSUPPORT)
-#define EPFNOSUPPORT 10000
-#endif
-#define CONST_EPFNOSUPPORT EPFNOSUPPORT
-
-/* The value of EPIPE. */
-#if !defined(EPIPE)
-#define EPIPE 10000
-#endif
-#define CONST_EPIPE EPIPE
-
-/* The value of EPROCLIM. */
-#if !defined(EPROCLIM)
-#define EPROCLIM 10000
-#endif
-#define CONST_EPROCLIM EPROCLIM
-
-/* The value of EPROCUNAVAIL. */
-#if !defined(EPROCUNAVAIL)
-#define EPROCUNAVAIL 10000
-#endif
-#define CONST_EPROCUNAVAIL EPROCUNAVAIL
-
-/* The value of EPROGMISMATCH. */
-#if !defined(EPROGMISMATCH)
-#define EPROGMISMATCH 10000
-#endif
-#define CONST_EPROGMISMATCH EPROGMISMATCH
-
-/* The value of EPROGUNAVAIL. */
-#if !defined(EPROGUNAVAIL)
-#define EPROGUNAVAIL 10000
-#endif
-#define CONST_EPROGUNAVAIL EPROGUNAVAIL
-
-/* The value of EPROTO. */
-#if !defined(EPROTO)
-#define EPROTO 10000
-#endif
-#define CONST_EPROTO EPROTO
-
-/* The value of EPROTONOSUPPORT. */
-#if !defined(EPROTONOSUPPORT)
-#define EPROTONOSUPPORT 10000
-#endif
-#define CONST_EPROTONOSUPPORT EPROTONOSUPPORT
-
-/* The value of EPROTOTYPE. */
-#if !defined(EPROTOTYPE)
-#define EPROTOTYPE 10000
-#endif
-#define CONST_EPROTOTYPE EPROTOTYPE
-
-/* The value of ERANGE. */
-#if !defined(ERANGE)
-#define ERANGE 10000
-#endif
-#define CONST_ERANGE ERANGE
-
-/* The value of EREMCHG. */
-#if !defined(EREMCHG)
-#define EREMCHG 10000
-#endif
-#define CONST_EREMCHG EREMCHG
-
-/* The value of EREMOTE. */
-#if !defined(EREMOTE)
-#define EREMOTE 10000
-#endif
-#define CONST_EREMOTE EREMOTE
-
-/* The value of EROFS. */
-#if !defined(EROFS)
-#define EROFS 10000
-#endif
-#define CONST_EROFS EROFS
-
-/* The value of ERPCMISMATCH. */
-#if !defined(ERPCMISMATCH)
-#define ERPCMISMATCH 10000
-#endif
-#define CONST_ERPCMISMATCH ERPCMISMATCH
-
-/* The value of ERREMOTE. */
-#if !defined(ERREMOTE)
-#define ERREMOTE 10000
-#endif
-#define CONST_ERREMOTE ERREMOTE
-
-/* The value of ESHUTDOWN. */
-#if !defined(ESHUTDOWN)
-#define ESHUTDOWN 10000
-#endif
-#define CONST_ESHUTDOWN ESHUTDOWN
-
-/* The value of ESOCKTNOSUPPORT. */
-#if !defined(ESOCKTNOSUPPORT)
-#define ESOCKTNOSUPPORT 10000
-#endif
-#define CONST_ESOCKTNOSUPPORT ESOCKTNOSUPPORT
-
-/* The value of ESPIPE. */
-#if !defined(ESPIPE)
-#define ESPIPE 10000
-#endif
-#define CONST_ESPIPE ESPIPE
-
-/* The value of ESRCH. */
-#if !defined(ESRCH)
-#define ESRCH 10000
-#endif
-#define CONST_ESRCH ESRCH
-
-/* The value of ESRMNT. */
-#if !defined(ESRMNT)
-#define ESRMNT 10000
-#endif
-#define CONST_ESRMNT ESRMNT
-
-/* The value of ESTALE. */
-#if !defined(ESTALE)
-#define ESTALE 10000
-#endif
-#define CONST_ESTALE ESTALE
-
-/* The value of ETIME. */
-#if !defined(ETIME)
-#define ETIME 10000
-#endif
-#define CONST_ETIME ETIME
-
-/* The value of ETIMEDOUT. */
-#if !defined(ETIMEDOUT)
-#define ETIMEDOUT 10000
-#endif
-#define CONST_ETIMEDOUT ETIMEDOUT
-
-/* The value of ETOOMANYREFS. */
-#if !defined(ETOOMANYREFS)
-#define ETOOMANYREFS 10000
-#endif
-#define CONST_ETOOMANYREFS ETOOMANYREFS
-
-/* The value of ETXTBSY. */
-#if !defined(ETXTBSY)
-#define ETXTBSY 10000
-#endif
-#define CONST_ETXTBSY ETXTBSY
-
-/* The value of EUSERS. */
-#if !defined(EUSERS)
-#define EUSERS 10000
-#endif
-#define CONST_EUSERS EUSERS
-
-/* The value of EWOULDBLOCK. */
-#if !defined(EWOULDBLOCK)
-#define EWOULDBLOCK 10000
-#endif
-#define CONST_EWOULDBLOCK EWOULDBLOCK
-
-/* The value of EXDEV. */
-#if !defined(EXDEV)
-#define EXDEV 10000
-#endif
-#define CONST_EXDEV EXDEV
-
-/* The value of O_BINARY. */
-#if !defined(O_BINARY)
-#define O_BINARY 10000
-#endif
-#define CONST_O_BINARY O_BINARY
-
-/* The value of SIGINT. */
-#if !defined(SIGINT)
-#define SIGINT 10000
-#endif
-#define CONST_SIGINT SIGINT
-
-
-#endif
-
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/include/IntLikeInstance.h b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/include/IntLikeInstance.h
deleted file mode 100644
--- a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/include/IntLikeInstance.h
+++ /dev/null
@@ -1,242 +0,0 @@
-{- --------------------------------------------------------------------------
-// Macros to help make various instances for Int like types (Int8, ...).
-//
-// Primitives are defined by 2 forms of macros:
-//  - starting with PRIMS_  : name of Haskell function and primitive is the same
-//  - starting with PRIMS2_ : name of primitive is given explicitly, to allow sharing between primitives
-// --------------------------------------------------------------------------
--}
-
--- define conversion primitives
-#define PRIMS_CONVERSION_INTEGER(tycon,primIntegerTo,primToInteger) \
-foreign import prim primIntegerTo :: Integer -> tycon ; \
-foreign import prim primToInteger :: tycon -> Integer 
-
-#define PRIMS2_CONVERSION_INTEGER(tycon,primIntegerTo,primIntegerToNm,primToInteger,primToIntegerNm) \
-foreign import prim primIntegerToNm primIntegerTo :: Integer -> tycon ; \
-foreign import prim primToIntegerNm primToInteger :: tycon -> Integer 
-
-#define PRIMS_CONVERSION_INT(tycon,primIntTo,primToInt) \
-foreign import prim primIntTo     :: Int -> tycon ; \
-foreign import prim primToInt     :: tycon -> Int 
-
-
--- define Eq primitives
-#define PRIMS_EQ(tycon,primEq,primNe) \
-foreign import prim primEq      :: tycon -> tycon -> Bool ; \
-foreign import prim primNe      :: tycon -> tycon -> Bool 
-
-#define PRIMS2_EQ(tycon,primEq,primEqNm,primNe,primNeNm) \
-foreign import prim primEqNm primEq     :: tycon -> tycon -> Bool ; \
-foreign import prim primNeNm primNe     :: tycon -> tycon -> Bool
-
-
--- define Eq instance
-#define INSTANCE_EQ(tycon,primEq,primNe) \
-instance Eq tycon where \
-  { (==) = primEq ; \
-  	(/=) = primNe \
-  }
-
-
--- define Ord primitives
-
-#define PRIMS_ORD(tycon,primCmp,primLt,primGt,primLe,primGe) \
-foreign import prim primCmp     :: tycon -> tycon -> Ordering ; \
-foreign import prim primLt      :: tycon -> tycon -> Bool ; \
-foreign import prim primGt      :: tycon -> tycon -> Bool ; \
-foreign import prim primLe      :: tycon -> tycon -> Bool ; \
-foreign import prim primGe      :: tycon -> tycon -> Bool 
-
-#define PRIMS2_ORD(tycon,primCmp,primCmpNm,primLt,primLtNm,primGt,primGtNm,primLe,primLeNm,primGe,primGeNm) \
-foreign import prim primCmpNm primCmp     :: tycon -> tycon -> Ordering ; \
-foreign import prim primLtNm primLt      :: tycon -> tycon -> Bool ; \
-foreign import prim primGtNm primGt      :: tycon -> tycon -> Bool ; \
-foreign import prim primLeNm primLe      :: tycon -> tycon -> Bool ; \
-foreign import prim primGeNm primGe      :: tycon -> tycon -> Bool 
-
-
--- define Ord instance
-
-#define INSTANCE_ORD(tycon,primCmp,primLt,primGt,primLe,primGe) \
-instance Ord tycon where \
-  { compare = primCmp \
-  ; (<) = primLt \
-  ; (>) = primGt \
-  ; (<=) = primLe \
-  ; (>=) = primGe \
-  }
-
-
--- define Bounded primitives
-#define PRIMS_BOUNDED(tycon,primMin,primMax) \
-foreign import prim primMin     :: tycon ; \
-foreign import prim primMax     :: tycon 
-
-
--- define Bounded instance
-#define INSTANCE_BOUNDED(tycon,primMin,primMax) \
-instance Bounded tycon where \
-  { minBound = primMin \
-  ; maxBound = primMax \
-  }
-
-
--- define Num primitives
-#define PRIMS_NUM(tycon,primAdd,primSub,primMul,primNeg) \
-foreign import prim primAdd       :: tycon -> tycon -> tycon ; \
-foreign import prim primSub       :: tycon -> tycon -> tycon ; \
-foreign import prim primMul       :: tycon -> tycon -> tycon ; \
-foreign import prim primNeg       :: tycon -> tycon 
-
-#define PRIMS2_NUM(tycon,primAdd,primAddNm,primSub,primSubNm,primMul,primMulNm,primNeg,primNegNm) \
-foreign import prim primAddNm 			primAdd       :: tycon -> tycon -> tycon ; \
-foreign import prim primSubNm 			primSub       :: tycon -> tycon -> tycon ; \
-foreign import prim primMulNm 			primMul       :: tycon -> tycon -> tycon ; \
-foreign import prim primNegNm 			primNeg       :: tycon -> tycon 
-
-
--- define Num instance
-#define INSTANCE_NUM(tycon,primAdd,primSub,primMul,primNeg,primIntegerTo,primIntTo) \
-instance Num tycon where \
-  { (+)         = primAdd \
-  ; (-)         = primSub \
-  ; (*)         = primMul \
-  ; negate      = primNeg \
-  ; fromInteger = primIntegerTo \
-  ; fromInt     = primIntTo \
-  ; abs         = absReal \
-  ; signum      = signumReal \
-  }
-
-
--- define Enum instance
-#define INSTANCE_ENUM(tycon,primToEnum,primFromEnum) \
-instance Enum tycon where \
-  { succ           = boundedSucc \
-  ; pred           = boundedPred \
-  ; toEnum         = primToEnum \
-  ; fromEnum       = primFromEnum \
-  ; enumFrom       = boundedEnumFrom \
-  ; enumFromTo     = boundedEnumFromTo \
-  ; enumFromThen   = boundedEnumFromThen \
-  ; enumFromThenTo = boundedEnumFromThenTo \
-  }
-
-
--- define Real instance
-#define INSTANCE_REAL(tycon) \
-instance Real tycon where \
-  { toRational x = toInteger x % 1 \
-  }
-
-
--- define Integral primitives
-#define PRIMS_INTEGRAL1(tycon,primDiv,primMod,primQuot,primRem) \
-foreign import prim primDiv       :: tycon -> tycon -> tycon ; \
-foreign import prim primMod       :: tycon -> tycon -> tycon ; \
-foreign import prim primQuot      :: tycon -> tycon -> tycon ; \
-foreign import prim primRem       :: tycon -> tycon -> tycon 
-
-#define PRIMS2_INTEGRAL1(tycon,primDiv,primDivNm,primMod,primModNm,primQuot,primQuotNm,primRem,primRemNm) \
-foreign import prim primDivNm 			primDiv       :: tycon -> tycon -> tycon ; \
-foreign import prim primModNm 			primMod       :: tycon -> tycon -> tycon ; \
-foreign import prim primQuotNm 			primQuot      :: tycon -> tycon -> tycon ; \
-foreign import prim primRemNm 			primRem       :: tycon -> tycon -> tycon 
-
-#define PRIMS_INTEGRAL2(tycon,primDiv,primMod,primDivMod,primQuot,primRem,primQuotRem) \
-PRIMS_INTEGRAL1(tycon,primDiv,primMod,primQuot,primRem) ; \
-foreign import prim primDivMod    :: tycon -> tycon -> (tycon,tycon) ; \
-foreign import prim primQuotRem   :: tycon -> tycon -> (tycon,tycon) 
-
-#define PRIMS2_INTEGRAL2(tycon,primDiv,primDivNm,primMod,primModNm,primDivMod,primDivModNm,primQuot,primQuotNm,primRem,primRemNm,primQuotRem,primQuotRemNm) \
-PRIMS2_INTEGRAL1(tycon,primDiv,primDivNm,primMod,primModNm,primQuot,primQuotNm,primRem,primQuotRemNm) ; \
-foreign import prim primDivModNm 	primDivMod    :: tycon -> tycon -> (tycon,tycon) ; \
-foreign import prim primQuotRemNm 	primQuotRem   :: tycon -> tycon -> (tycon,tycon) 
-
-
--- define Integral instance, assume default for divMod
-#define INSTANCE_INTEGRAL1(tycon,primDiv,primMod,primQuot,primRem,primToInteger,primToInt) \
-instance Integral tycon where \
-  { quotRem d m \
-              = (primQuot d m, primRem d m) \
-  ; div       = primDiv \
-  ; quot      = primQuot \
-  ; rem       = primRem \
-  ; mod       = primMod \
-  ; toInteger = primToInteger \
-  ; toInt     = primToInt \
-  }
-
-#define INSTANCE_INTEGRAL2(tycon,primDiv,primMod,primDivMod,primQuot,primRem,primQuotRem,primToInteger,primToInt) \
-instance Integral tycon where \
-  { divMod    = primDivMod \
-  ; quotRem   = primQuotRem \
-  ; div       = primDiv \
-  ; quot      = primQuot \
-  ; rem       = primRem \
-  ; mod       = primMod \
-  ; toInteger = primToInteger \
-  ; toInt     = primToInt \
-  }
-
-
--- define Show instance
-#define INSTANCE_SHOW(tycon) \
-instance Show tycon where \
-  { show = show . toInteger \
-  }
-
-
--- define Read instance
-#define INSTANCE_READ(tycon) \
-instance Read tycon where \
-  { readsPrec p = readSigned readDec \
-  }
-
-
--- define Bits primitives
-#define PRIMS_BITLOGIC(tycon,primAnd,primOr,primXor) \
-foreign import prim primAnd       	:: tycon -> tycon -> tycon ; \
-foreign import prim primOr       	:: tycon -> tycon -> tycon ; \
-foreign import prim primXor      	:: tycon -> tycon -> tycon
-
-#define PRIMS_BITSHIFT(tycon,primComplement,primShiftLeft,primShiftRight,primRotateLeft,primRotateRight) \
-foreign import prim primComplement	:: tycon -> tycon ; \
-foreign import prim primShiftLeft  	:: tycon -> Int -> tycon ; \
-foreign import prim primShiftRight 	:: tycon -> Int -> tycon ; \
-foreign import prim primRotateLeft  :: tycon -> Int -> tycon ; \
-foreign import prim primRotateRight :: tycon -> Int -> tycon
-
-#define PRIMS2_BITLOGIC(tycon,primAnd,primAndNm,primOr,primOrNm,primXor,primXorNm) \
-foreign import prim primAndNm       	primAnd       	:: tycon -> tycon -> tycon ; \
-foreign import prim primOrNm       		primOr       	:: tycon -> tycon -> tycon ; \
-foreign import prim primXorNm      		primXor      	:: tycon -> tycon -> tycon
-
-#define PRIMS2_BITSHIFT(tycon,primComplement,primComplementNm,primShiftLeft,primShiftLeftNm,primShiftRight,primShiftRightNm,primRotateLeft,primRotateLeftNm,primRotateRight,primRotateRightNm) \
-foreign import prim primComplementNm	primComplement	:: tycon -> tycon ; \
-foreign import prim primShiftLeftNm  	primShiftLeft  	:: tycon -> Int -> tycon ; \
-foreign import prim primShiftRightNm 	primShiftRight 	:: tycon -> Int -> tycon ; \
-foreign import prim primRotateLeftNm  	primRotateLeft  :: tycon -> Int -> tycon ; \
-foreign import prim primRotateRightNm 	primRotateRight :: tycon -> Int -> tycon
-
--- define Bits instance
-#define INSTANCE_BITS1(tycon,size,signed,primAnd,primOr,primXor,primComplement,primShiftLeft,primShiftRight,primRotateLeft,primRotateRight) \
-instance Bits tycon where \
-  { (.&.)   	= primAnd \
-  ; (.|.)   	= primOr \
-  ; xor	   		= primXor \
-  ; complement  = primComplement \
-  ; shiftL      = primShiftLeft \
-  ; shiftR      = primShiftRight \
-  ; rotateL     = primRotateLeft \
-  ; rotateR     = primRotateRight \
-  ; bitSize _   = size \
-  ; isSigned _  = signed \
-  }
-
-
-
-
-
-
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/include/MachDeps.h b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/include/MachDeps.h
deleted file mode 100644
--- a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/include/MachDeps.h
+++ /dev/null
@@ -1,125 +0,0 @@
-/* ehclib/uhcbase/include/MachDeps.h.  Generated from MachDeps.h.in by configure.  */
-#ifndef MACHDEPS_H
-#define MACHDEPS_H
-
-#define SIZEOF_INTPTR_T 8
-#define SIZEOF_CHAR 1
-#define SIZEOF_SHORT 2
-#define SIZEOF_INT 4
-#define SIZEOF_LONG 8
-#define SIZEOF_LONG_LONG 8
-#define SIZEOF_FLOAT 4
-#define SIZEOF_DOUBLE 8
-#define SIZEOF_UNSIGNED_CHAR 1
-#define SIZEOF_UNSIGNED_SHORT 2
-#define SIZEOF_UNSIGNED_INT 4
-#define SIZEOF_UNSIGNED_LONG 8
-#define SIZEOF_UNSIGNED_LONG_LONG 8
-#define SIZEOF_VOID_P 8
-
-#define SIZEOF_DEV_T 4
-#define SIZEOF_INO_T 8
-#define SIZEOF_OFF_T 8
-#define SIZEOF_MODE_T 2
-#define SIZEOF_PID_T 4
-#define SIZEOF_SSIZE_T 8
-#define SIZEOF_GID_T 4
-#define SIZEOF_NLINK_T 2
-#define SIZEOF_UID_T 4
-#define SIZEOF_RLIM_T 8
-#define SIZEOF_CLOCK_T 8
-#define SIZEOF_TIME_T 8
-#define SIZEOF_SIZE_T 8
-#define SIZEOF_WCHAR_T 4
-
-#define SIZEOF_CC_T 1
-#define SIZEOF_SPEED_T 8
-#define SIZEOF_TCFLAG_T 8
-
-#define ALIGNOF_INTPTR_T 8
-#define ALIGNOF_CHAR 1
-#define ALIGNOF_SHORT 2
-#define ALIGNOF_INT 4
-#define ALIGNOF_LONG 8
-#define ALIGNOF_LONG_LONG 8
-#define ALIGNOF_FLOAT 4
-#define ALIGNOF_DOUBLE 8
-#define ALIGNOF_UNSIGNED_CHAR 1
-#define ALIGNOF_UNSIGNED_SHORT 2
-#define ALIGNOF_UNSIGNED_INT 4
-#define ALIGNOF_UNSIGNED_LONG 8
-#define ALIGNOF_UNSIGNED_LONG_LONG 8
-#define ALIGNOF_VOID_P 8
-
-#define ALIGNOF_UINT8_T 1
-#define ALIGNOF_UINT16_T 2
-#define ALIGNOF_UINT32_T 4
-#define ALIGNOF_UINT64_T 8
-
-#if SIZEOF_INTPTR_T == 8
-#define USE_64_BITS 1
-#define USE_32_BITS 0
-#else
-#define USE_64_BITS 0
-#define USE_32_BITS 1
-#endif
-
-#ifdef __UHC_TARGET_BC__
-#define BITSIZEOF_WORDTAG		1
-#else
-#define BITSIZEOF_WORDTAG		0
-#endif
-
-#define SIZEOF_HSCHAR           SIZEOF_INTPTR_T
-#define ALIGNMENT_HSCHAR        ALIGNOF_UINT32_T
-
-#define SIZEOF_HSINT            SIZEOF_INTPTR_T
-#define ALIGNMENT_HSINT         ALIGNOF_INTPTR_T
-
-#define SIZEOF_HSWORD			SIZEOF_INTPTR_T
-#define ALIGNMENT_HSWORD		ALIGNOF_INTPTR_T
-
-#define SIZEOF_HSDOUBLE			SIZEOF_DOUBLE
-#define ALIGNMENT_HSDOUBLE		ALIGNOF_DOUBLE
-
-#define SIZEOF_HSFLOAT			SIZEOF_FLOAT
-#define ALIGNMENT_HSFLOAT		ALIGNOF_FLOAT
-
-#define SIZEOF_HSPTR            SIZEOF_VOID_P
-#define ALIGNMENT_HSPTR         ALIGNOF_VOID_P
-
-#define SIZEOF_HSFUNPTR         SIZEOF_VOID_P
-#define ALIGNMENT_HSFUNPTR      ALIGNOF_VOID_P
-
-#define SIZEOF_HSFOREIGNPTR     SIZEOF_VOID_P
-#define ALIGNMENT_HSFOREIGNPTR  ALIGNOF_VOID_P
-
-#define SIZEOF_HSSTABLEPTR      SIZEOF_VOID_P
-#define ALIGNMENT_HSSTABLEPTR   ALIGNOF_VOID_P
-
-#define SIZEOF_INT8             8
-#define ALIGNMENT_INT8          ALIGNOF_UINT8_T
-
-#define SIZEOF_WORD8            8
-#define ALIGNMENT_WORD8         ALIGNOF_UINT8_T
-
-#define SIZEOF_INT16            16
-#define ALIGNMENT_INT16         ALIGNOF_UINT16_T
-
-#define SIZEOF_WORD16           16
-#define ALIGNMENT_WORD16        ALIGNOF_UINT16_T
-
-#define SIZEOF_INT32            32
-#define ALIGNMENT_INT32         ALIGNOF_UINT32_T
-
-#define SIZEOF_WORD32           32
-#define ALIGNMENT_WORD32        ALIGNOF_UINT32_T
-
-#define SIZEOF_INT64            64
-#define ALIGNMENT_INT64         ALIGNOF_UINT64_T
-
-#define SIZEOF_WORD64           64
-#define ALIGNMENT_WORD64        ALIGNOF_UINT64_T
-
-
-#endif
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/include/TupleInstance.h b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/include/TupleInstance.h
deleted file mode 100644
--- a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/include/TupleInstance.h
+++ /dev/null
@@ -1,147 +0,0 @@
-{- --------------------------------------------------------------------------
-// Macros to help make various instances for tuples.
-// A kind of poor mans deriving.
-//
-// --------------------------------------------------------------------------
--}
-
-#define	COMMA	,
-
-{- --------------------------------------------------------------------------
-// 2 tuple, 1 unary op
-// --------------------------------------------------------------------------
--}
-#define TUPLE2_UNOP1_INSTANCE(clscon,op1,op1preArg,op1postArg,op1subop,pre,sep,post) \
-instance (clscon a, clscon b) => clscon (a,b) where \
-  { op1 op1preArg (a,b) op1postArg \
-      = pre \
-            op1subop a \
-        sep op1subop b \
-        post \
-  }
-
-{- --------------------------------------------------------------------------
-// 3 tuple, 1 unary op
-// --------------------------------------------------------------------------
--}
-#define TUPLE3_UNOP1_INSTANCE(clscon,op1,op1preArg,op1postArg,op1subop,pre,sep,post) \
-instance (clscon a, clscon b, clscon c) => clscon (a,b,c) where \
-  { op1 op1preArg (a,b,c) op1postArg \
-      = pre \
-            op1subop a \
-        sep op1subop b \
-        sep op1subop c \
-        post \
-  }
-
-{- --------------------------------------------------------------------------
-// 4 tuple, 1 unary op
-// --------------------------------------------------------------------------
--}
-#define TUPLE4_UNOP1_INSTANCE(clscon,op1,op1preArg,op1postArg,op1subop,pre,sep,post) \
-instance (clscon a, clscon b, clscon c, clscon d) => clscon (a,b,c,d) where \
-  { op1 op1preArg (a,b,c,d) op1postArg \
-      = pre \
-            op1subop a \
-        sep op1subop b \
-        sep op1subop c \
-        sep op1subop d \
-        post \
-  }
-
-{- --------------------------------------------------------------------------
-// 5 tuple, 1 unary op
-// --------------------------------------------------------------------------
--}
-#define TUPLE5_UNOP1_INSTANCE(clscon,op1,op1preArg,op1postArg,op1subop,pre,sep,post) \
-instance (clscon a, clscon b, clscon c, clscon d, clscon e) => clscon (a,b,c,d,e) where \
-  { op1 op1preArg (a,b,c,d,e) op1postArg \
-      = pre \
-            op1subop a \
-        sep op1subop b \
-        sep op1subop c \
-        sep op1subop d \
-        sep op1subop e \
-        post \
-  }
-
-{- --------------------------------------------------------------------------
-// Set of 2..n tuple, 1 unary op
-// --------------------------------------------------------------------------
--}
-#define TUPLE_UNOP1_INSTANCES(clscon,op1,op1preArg,op1postArg,op1subop,pre,sep,post) \
-{ TUPLE2_UNOP1_INSTANCE(clscon,op1,op1preArg,op1postArg,op1subop,pre,sep,post) ;\
-  TUPLE3_UNOP1_INSTANCE(clscon,op1,op1preArg,op1postArg,op1subop,pre,sep,post) ;\
-  TUPLE4_UNOP1_INSTANCE(clscon,op1,op1preArg,op1postArg,op1subop,pre,sep,post) ;\
-  TUPLE5_UNOP1_INSTANCE(clscon,op1,op1preArg,op1postArg,op1subop,pre,sep,post) \
-}
-
-{- --------------------------------------------------------------------------
-// 2 tuple, 1 binary op
-// --------------------------------------------------------------------------
--}
-#define TUPLE2_BINOP1_INSTANCE(clscon,op1,op1subop,pre,sep,post) \
-instance (clscon a, clscon b) => clscon (a,b) where \
-  { (a1,b1) op1 (a2,b2) \
-      = pre \
-            a1 op1subop a2 \
-        sep b1 op1subop b2 \
-        post \
-  }
-
-{- --------------------------------------------------------------------------
-// 3 tuple, 1 binary op
-// --------------------------------------------------------------------------
--}
-#define TUPLE3_BINOP1_INSTANCE(clscon,op1,op1subop,pre,sep,post) \
-instance (clscon a, clscon b, clscon c) => clscon (a,b,c) where \
-  { (a1,b1,c1) op1 (a2,b2,c2) \
-      = pre \
-            a1 op1subop a2 \
-        sep b1 op1subop b2 \
-        sep c1 op1subop c2 \
-        post \
-  }
-
-{- --------------------------------------------------------------------------
-// 4 tuple, 1 binary op
-// --------------------------------------------------------------------------
--}
-#define TUPLE4_BINOP1_INSTANCE(clscon,op1,op1subop,pre,sep,post) \
-instance (clscon a, clscon b, clscon c, clscon d) => clscon (a,b,c,d) where \
-  { (a1,b1,c1,d1) op1 (a2,b2,c2,d2) \
-      = pre \
-            a1 op1subop a2 \
-        sep b1 op1subop b2 \
-        sep c1 op1subop c2 \
-        sep d1 op1subop d2 \
-        post \
-  }
-
-{- --------------------------------------------------------------------------
-// 5 tuple, 1 binary op
-// --------------------------------------------------------------------------
--}
-#define TUPLE5_BINOP1_INSTANCE(clscon,op1,op1subop,pre,sep,post) \
-instance (clscon a, clscon b, clscon c, clscon d, clscon e) => clscon (a,b,c,d,e) where \
-  { (a1,b1,c1,d1,e1) op1 (a2,b2,c2,d2,e2) \
-      = pre \
-            a1 op1subop a2 \
-        sep b1 op1subop b2 \
-        sep c1 op1subop c2 \
-        sep d1 op1subop d2 \
-        sep e1 op1subop e2 \
-        post \
-  }
-
-{- --------------------------------------------------------------------------
-// Set of 2..n tuple, 1 binary op
-// --------------------------------------------------------------------------
--}
-#define TUPLE_BINOP1_INSTANCES(clscon,op1,op1subop,pre,sep,post) \
-{ TUPLE2_BINOP1_INSTANCE(clscon,op1,op1subop,pre,sep,post) ;\
-  TUPLE3_BINOP1_INSTANCE(clscon,op1,op1subop,pre,sep,post) ;\
-  TUPLE4_BINOP1_INSTANCE(clscon,op1,op1subop,pre,sep,post) ;\
-  TUPLE5_BINOP1_INSTANCE(clscon,op1,op1subop,pre,sep,post) \
-}
-
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/include/Typeable.h b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/include/Typeable.h
deleted file mode 100644
--- a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/include/Typeable.h
+++ /dev/null
@@ -1,149 +0,0 @@
-{- --------------------------------------------------------------------------
-// Macros to help make Typeable instances.
-//
-// INSTANCE_TYPEABLEn(tc,tcname,"tc") defines
-//
-//	instance Typeable/n/ tc
-//	instance Typeable a => Typeable/n-1/ (tc a)
-//	instance (Typeable a, Typeable b) => Typeable/n-2/ (tc a b)
-//	...
-//	instance (Typeable a1, ..., Typeable an) => Typeable (tc a1 ... an)
-// --------------------------------------------------------------------------
--}
-
-#ifndef TYPEABLE_H
-#define TYPEABLE_H
-
-#define INSTANCE_TYPEABLE0(tycon,tcname,str) \
-tcname :: TyCon; \
-tcname = mkTyCon str; \
-instance Typeable tycon where { typeOf _ = mkTyConApp tcname [] }
-
-#ifdef __GLASGOW_HASKELL__
-
---  // For GHC, the extra instances follow from general instance declarations
---  // defined in Data.Typeable.
-
-#define INSTANCE_TYPEABLE1(tycon,tcname,str) \
-tcname :: TyCon; \
-tcname = mkTyCon str; \
-instance Typeable1 tycon where { typeOf1 _ = mkTyConApp tcname [] }
-
-#define INSTANCE_TYPEABLE2(tycon,tcname,str) \
-tcname :: TyCon; \
-tcname = mkTyCon str; \
-instance Typeable2 tycon where { typeOf2 _ = mkTyConApp tcname [] }
-
-#define INSTANCE_TYPEABLE3(tycon,tcname,str) \
-tcname :: TyCon; \
-tcname = mkTyCon str; \
-instance Typeable3 tycon where { typeOf3 _ = mkTyConApp tcname [] }
-
-#define INSTANCE_TYPEABLE4(tycon,tcname,str) \
-tcname :: TyCon; \
-tcname = mkTyCon str; \
-instance Typeable4 tycon where { typeOf4 _ = mkTyConApp tcname [] }
-
-#define INSTANCE_TYPEABLE5(tycon,tcname,str) \
-tcname :: TyCon; \
-tcname = mkTyCon str; \
-instance Typeable5 tycon where { typeOf5 _ = mkTyConApp tcname [] }
-
-#define INSTANCE_TYPEABLE6(tycon,tcname,str) \
-tcname :: TyCon; \
-tcname = mkTyCon str; \
-instance Typeable6 tycon where { typeOf6 _ = mkTyConApp tcname [] }
-
-#define INSTANCE_TYPEABLE7(tycon,tcname,str) \
-tcname :: TyCon; \
-tcname = mkTyCon str; \
-instance Typeable7 tycon where { typeOf7 _ = mkTyConApp tcname [] }
-
-#else /* !__GLASGOW_HASKELL__ */
-
-#define INSTANCE_TYPEABLE1(tycon,tcname,str) \
-tcname = mkTyCon str; \
-instance Typeable1 tycon where { typeOf1 _ = mkTyConApp tcname [] }; \
-instance Typeable a => Typeable (tycon a) where { typeOf = typeOfDefault }
-
-#define INSTANCE_TYPEABLE2(tycon,tcname,str) \
-tcname = mkTyCon str; \
-instance Typeable2 tycon where { typeOf2 _ = mkTyConApp tcname [] }; \
-instance Typeable a => Typeable1 (tycon a) where { \
-  typeOf1 = typeOf1Default }; \
-instance (Typeable a, Typeable b) => Typeable (tycon a b) where { \
-  typeOf = typeOfDefault }
-
-#define INSTANCE_TYPEABLE3(tycon,tcname,str) \
-tcname = mkTyCon str; \
-instance Typeable3 tycon where { typeOf3 _ = mkTyConApp tcname [] }; \
-instance Typeable a => Typeable2 (tycon a) where { \
-  typeOf2 = typeOf2Default }; \
-instance (Typeable a, Typeable b) => Typeable1 (tycon a b) where { \
-  typeOf1 = typeOf1Default }; \
-instance (Typeable a, Typeable b, Typeable c) => Typeable (tycon a b c) where { \
-  typeOf = typeOfDefault }
-
-#define INSTANCE_TYPEABLE4(tycon,tcname,str) \
-tcname = mkTyCon str; \
-instance Typeable4 tycon where { typeOf4 _ = mkTyConApp tcname [] }; \
-instance Typeable a => Typeable3 (tycon a) where { \
-  typeOf3 = typeOf3Default }; \
-instance (Typeable a, Typeable b) => Typeable2 (tycon a b) where { \
-  typeOf2 = typeOf2Default }; \
-instance (Typeable a, Typeable b, Typeable c) => Typeable1 (tycon a b c) where { \
-  typeOf1 = typeOf1Default }; \
-instance (Typeable a, Typeable b, Typeable c, Typeable d) => Typeable (tycon a b c d) where { \
-  typeOf = typeOfDefault }
-
-#define INSTANCE_TYPEABLE5(tycon,tcname,str) \
-tcname = mkTyCon str; \
-instance Typeable5 tycon where { typeOf5 _ = mkTyConApp tcname [] }; \
-instance Typeable a => Typeable4 (tycon a) where { \
-  typeOf4 = typeOf4Default }; \
-instance (Typeable a, Typeable b) => Typeable3 (tycon a b) where { \
-  typeOf3 = typeOf3Default }; \
-instance (Typeable a, Typeable b, Typeable c) => Typeable2 (tycon a b c) where { \
-  typeOf2 = typeOf2Default }; \
-instance (Typeable a, Typeable b, Typeable c, Typeable d) => Typeable1 (tycon a b c d) where { \
-  typeOf1 = typeOf1Default }; \
-instance (Typeable a, Typeable b, Typeable c, Typeable d, Typeable e) => Typeable (tycon a b c d e) where { \
-  typeOf = typeOfDefault }
-
-#define INSTANCE_TYPEABLE6(tycon,tcname,str) \
-tcname = mkTyCon str; \
-instance Typeable6 tycon where { typeOf6 _ = mkTyConApp tcname [] }; \
-instance Typeable a => Typeable5 (tycon a) where { \
-  typeOf5 = typeOf5Default }; \
-instance (Typeable a, Typeable b) => Typeable4 (tycon a b) where { \
-  typeOf4 = typeOf4Default }; \
-instance (Typeable a, Typeable b, Typeable c) => Typeable3 (tycon a b c) where { \
-  typeOf3 = typeOf3Default }; \
-instance (Typeable a, Typeable b, Typeable c, Typeable d) => Typeable2 (tycon a b c d) where { \
-  typeOf2 = typeOf2Default }; \
-instance (Typeable a, Typeable b, Typeable c, Typeable d, Typeable e) => Typeable1 (tycon a b c d e) where { \
-  typeOf1 = typeOf1Default }; \
-instance (Typeable a, Typeable b, Typeable c, Typeable d, Typeable e, Typeable f) => Typeable (tycon a b c d e f) where { \
-  typeOf = typeOfDefault }
-
-#define INSTANCE_TYPEABLE7(tycon,tcname,str) \
-tcname = mkTyCon str; \
-instance Typeable7 tycon where { typeOf7 _ = mkTyConApp tcname [] }; \
-instance Typeable a => Typeable6 (tycon a) where { \
-  typeOf6 = typeOf6Default }; \
-instance (Typeable a, Typeable b) => Typeable5 (tycon a b) where { \
-  typeOf5 = typeOf5Default }; \
-instance (Typeable a, Typeable b, Typeable c) => Typeable4 (tycon a b c) where { \
-  typeOf4 = typeOf4Default }; \
-instance (Typeable a, Typeable b, Typeable c, Typeable d) => Typeable3 (tycon a b c d) where { \
-  typeOf3 = typeOf3Default }; \
-instance (Typeable a, Typeable b, Typeable c, Typeable d, Typeable e) => Typeable2 (tycon a b c d e) where { \
-  typeOf2 = typeOf2Default }; \
-instance (Typeable a, Typeable b, Typeable c, Typeable d, Typeable e, Typeable f) => Typeable1 (tycon a b c d e f) where { \
-  typeOf1 = typeOf1Default }; \
-instance (Typeable a, Typeable b, Typeable c, Typeable d, Typeable e, Typeable f, Typeable g) => Typeable (tycon a b c d e f g) where { \
-  typeOf = typeOfDefault }
-
-#endif /* !__GLASGOW_HASKELL__ */
-
-#endif
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/include/dirUtils.h b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/include/dirUtils.h
deleted file mode 100644
--- a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/include/dirUtils.h
+++ /dev/null
@@ -1,11 +0,0 @@
-/* 
- * (c) The University of Glasgow 2002
- *
- * Directory Runtime Support
- */
-#ifndef __DIRUTILS_H__
-#define __DIRUTILS_H__
-
-extern int __hscore_readdir(DIR *dirPtr, struct dirent **pDirEnt);
-
-#endif /* __DIRUTILS_H__ */
diff --git a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/installed-pkg-config b/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/installed-pkg-config
deleted file mode 100644
--- a/103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/installed-pkg-config
+++ /dev/null
@@ -1,2 +0,0 @@
-exposed-modules: Control.Monad Data.Bits Data.Char Data.Either Data.Int Data.IORef Data.List Data.Maybe Data.Typeable Data.Word Debug.Trace Foreign.C.Error Foreign.C.String Foreign.C.Types Foreign.C Foreign.ForeignPtr Foreign.Marshal.Alloc Foreign.Marshal.Array Foreign.Marshal.Error Foreign.Marshal.Pool Foreign.Marshal.Utils Foreign.Marshal Foreign.Ptr Foreign.StablePtr Foreign.Storable Foreign System.IO.Error System.IO.Fix System.IO.Unsafe System.IO System.Posix.Internals System.Posix.Types UHC.Array UHC.Base UHC.Bits UHC.Bounded UHC.BoxArray UHC.ByteArray UHC.Char UHC.Conc UHC.Enum UHC.Eq UHC.Float UHC.ForeignPtr UHC.GC UHC.Generics.Tuple UHC.Generics UHC.Handle UHC.Int UHC.IO UHC.IOBase UHC.Ix UHC.LazyST UHC.MutVar UHC.MVar UHC.OldException UHC.OldIO UHC.Ord UHC.Prims UHC.Ptr UHC.Read UHC.Real UHC.Run UHC.Show UHC.ST UHC.StablePtr UHC.StackTrace UHC.Storable UHC.STRef UHC.Types UHC.Weak UHC.WeakPtr UHC.Word Unsafe.Coerce
-build-depends: 
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,9 +1,27 @@
 # Changelog
 
+## 1.1.8.10 - 20150327
+
+- [edit this] and this, adding new entries as needed (version nr etc is prefixed when using version bumping Makefile targets)
+
+## 1.1.8.10 - 20150327
+
+- [build] Internal compilerdriver refactorization and start of rewrite with new compilerdriver based on a simple incremental DSL for describing compilation.
+
+## 1.1.8.9 - 20150301
+
+- [build] Intro of dependency on template haskell due to start of use of a lens library (fclabels, via uhc-util)
+- [git] Tagging of versions, change in changelog maintenance (is not created from edit version, prepending version nr etc)
+
+## 1.1.8.8 - 20150301
+
+- unused version
+
 ## 1.1.8.7 - 20150219
 
 - [compiler driver] Refactoring: top level compiler driver functions now are typed as monad transformer, requiring adapted uhc-utils>=0.1.5.0.
 - [corerun] More primitives implemented.
+- [corerun] CoreRun files can be serialized, now also generated by default (enabling direct running these).
 
 ## 1.1.8.6
 
diff --git a/src/UHC/Light/Compiler/AbstractCore.hs b/src/UHC/Light/Compiler/AbstractCore.hs
--- a/src/UHC/Light/Compiler/AbstractCore.hs
+++ b/src/UHC/Light/Compiler/AbstractCore.hs
@@ -98,13 +98,11 @@
 import Control.Monad
 import UHC.Util.Binary
 import UHC.Util.Serialize
-import Data.Typeable (Typeable)
-import Data.Generics (Data)
 
 
 
 
-{-# LINE 38 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 36 "src/ehc/AbstractCore.chs" #-}
 class AbstractCore  expr metaval bind bound boundmeta bindcateg metabind ty pat patrest patfld alt
     | expr       ->      metaval bind bound boundmeta bindcateg metabind ty pat patrest patfld alt
     , metaval    -> expr
@@ -363,10 +361,10 @@
   acoreExprIsCoeArg :: expr -> Bool
 
 
-{-# LINE 321 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 319 "src/ehc/AbstractCore.chs" #-}
 type ACoreAppLikeMetaBound = (ACoreBindAspectKeyS,MetaLev,CLbl)
 
-{-# LINE 325 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 323 "src/ehc/AbstractCore.chs" #-}
 instance AbstractCore e m b bound boundmeta bcat mbind t p pr pf a => AppLike e boundmeta {- () () -} where
   app1App       = acore1App
   appTop        = id
@@ -383,22 +381,22 @@
                      (_,a) <- acoreBoundMbVal b
                      return (f,a)
 
-{-# LINE 356 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 354 "src/ehc/AbstractCore.chs" #-}
 instance AbstractCore e m b bound boundmeta bcat mbind t p pr pf a => RecLike e boundmeta {- () () -} where
   recRow _ fs   = acoreTagTyTupBound CTagRec (acoreTyErr "AbstractCore.RecLike.recRow") [ acoreBound1MetaVal (acoreBoundmeta acbaspkeyDefault 0 (CLbl_Nm n)) e | (n,e) <- fs ]
 
   recMbRecRow  _= Nothing -- tyMbRecRowWithLkup (const Nothing)
   recUnRowExts e= (e,[])
 
-{-# LINE 368 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 366 "src/ehc/AbstractCore.chs" #-}
 acoreMetaLift :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a, Functor f) => f x -> f (x,m)
 acoreMetaLift = fmap2Tuple acoreMetavalDflt
 
-{-# LINE 373 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 371 "src/ehc/AbstractCore.chs" #-}
 acoreMetaLiftDict :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a, Functor f) => f x -> f (x,m)
 acoreMetaLiftDict = fmap2Tuple acoreMetavalDfltDict
 
-{-# LINE 383 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 381 "src/ehc/AbstractCore.chs" #-}
 -- | A ACoreBindAspectKeyS formed out of multiple ACoreBindAspectKey identifies a particular binding aspect
 data ACoreBindAspectKey
   = ACoreBindAspectKey_Default              -- identifies the default binding, if omitted in a reference this aspect is the one chosen.
@@ -428,11 +426,11 @@
 acbaspkeyMk :: [ACoreBindAspectKey] -> ACoreBindAspectKeyS
 acbaspkeyMk = Set.fromList
 
-{-# LINE 424 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 422 "src/ehc/AbstractCore.chs" #-}
 acbaspkeyMetaLev :: MetaLev -> ACoreBindAspectKeyS -> MetaLev
 acbaspkeyMetaLev mlev _ = mlev
 
-{-# LINE 435 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 433 "src/ehc/AbstractCore.chs" #-}
 -- | predefined:
 acbaspkeyNone :: ACoreBindAspectKeyS
 acbaspkeyNone = acbaspkeyMk
@@ -473,17 +471,17 @@
 acbaspkeyDebug = acbaspkeyMk
   [ ACoreBindAspectKey_Debug ]
 
-{-# LINE 494 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 492 "src/ehc/AbstractCore.chs" #-}
 -- | predefined:
 acbaspkeyFusionRole :: ACoreBindAspectKeyS
 acbaspkeyFusionRole = acbaspkeyMk
   [ ACoreBindAspectKey_FusionRole ]
 
-{-# LINE 501 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 499 "src/ehc/AbstractCore.chs" #-}
 ppACBaspKeyS :: ACoreBindAspectKeyS -> PP_Doc
 ppACBaspKeyS = ppCurlysCommas . Set.toList
 
-{-# LINE 506 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 504 "src/ehc/AbstractCore.chs" #-}
 -- | uniqify with ACoreBindAspectKeyS, omitting the default
 hsnUniqifyACoreBindAspectKeyS :: ACoreBindAspectKeyS -> HsName -> HsName
 hsnUniqifyACoreBindAspectKeyS as n
@@ -491,11 +489,13 @@
   where mk ACoreBindAspectKey_Strict = hsnUniqify    HsNameUniqifier_Strict
         mk a                         = hsnUniqifyStr HsNameUniqifier_BindAspect (show a)
 
-{-# LINE 515 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 513 "src/ehc/AbstractCore.chs" #-}
 deriving instance Typeable ACoreBindAspectKey
+
+{-# LINE 517 "src/ehc/AbstractCore.chs" #-}
 deriving instance Data ACoreBindAspectKey
 
-{-# LINE 524 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 525 "src/ehc/AbstractCore.chs" #-}
 -- | reference to binding aspect: name + aspect keys
 data ACoreBindRef
   = ACoreBindRef
@@ -516,28 +516,28 @@
 instance Show ACoreBindRef where
   show = show . mkHNm
 
-{-# LINE 546 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 547 "src/ehc/AbstractCore.chs" #-}
 acbrefAspKey :: ACoreBindRef -> ACoreBindAspectKeyS
 acbrefAspKey = maybe acbaspkeyNone id . acbrefMbAspKey
 {-# INLINE acbrefAspKey #-}
 
-{-# LINE 552 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 553 "src/ehc/AbstractCore.chs" #-}
 -- | narrow down aspects by adding more to ref; assume extra aspects non empty
 acbrefAspAnd :: ACoreBindAspectKeyS -> ACoreBindRef -> ACoreBindRef
 acbrefAspAnd a r = r {acbrefMbAspKey = Just $ a `Set.union` acbrefAspKey r }
 
-{-# LINE 558 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 559 "src/ehc/AbstractCore.chs" #-}
 ppACoreBindRef :: (HsName -> PP_Doc) -> ACoreBindRef -> PP_Doc
 ppACoreBindRef ppN r = ppN (acbrefNm r) >|< (maybe empty (ppCurlysCommas . Set.toList) $ acbrefMbAspKey r)
 
 instance PP ACoreBindRef where
   pp = ppACoreBindRef pp
 
-{-# LINE 566 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 567 "src/ehc/AbstractCore.chs" #-}
 deriving instance Typeable ACoreBindRef
 deriving instance Data ACoreBindRef
 
-{-# LINE 575 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 576 "src/ehc/AbstractCore.chs" #-}
 acore1App :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => e -> e -> e
 acore1App f a = acore1AppBound f (acoreBound1Val a)
 {-# INLINE acore1App #-}
@@ -552,7 +552,7 @@
 acoreAppBound :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => e -> [bound] -> e
 acoreAppBound f as = foldl (\f a -> acore1AppBound f a) f as
 
-{-# LINE 595 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 596 "src/ehc/AbstractCore.chs" #-}
 acoreLamBind :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => [b] -> e -> e
 acoreLamBind = flip (foldr acoreLam1Bind)
 {-# INLINE acoreLamBind #-}
@@ -573,7 +573,7 @@
 acoreLam :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => [HsName] -> e -> e
 acoreLam as e = foldr (\(n) e -> acoreLam1 n e) e as
 
-{-# LINE 617 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 618 "src/ehc/AbstractCore.chs" #-}
 acoreTagTupTy :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => CTag -> t -> [e] -> e
 acoreTagTupTy tg t es = acoreTagTyTupBound tg t $ map acoreBound1Val es
 
@@ -594,7 +594,7 @@
 acoreTag tg = acoreTagTup tg []
 {-# INLINE acoreTag #-}
 
-{-# LINE 650 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 651 "src/ehc/AbstractCore.chs" #-}
 acoreBind1CatLevMetaTyWith :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => (t->t) -> (e->e) -> bcat -> HsName -> MetaLev -> m -> t -> e -> b
 acoreBind1CatLevMetaTyWith mkT mkE cat n l m t e = acoreBind1CatLevMetasTy cat n l (acoreMetabindDflt,m) (mkT t) (mkE e)
 {-# INLINE acoreBind1CatLevMetaTyWith #-}
@@ -631,7 +631,7 @@
 acoreBind1 n e = acoreBind1Cat (acoreBindcategDflt e) n e
 {-# INLINE acoreBind1 #-}
 
-{-# LINE 688 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 689 "src/ehc/AbstractCore.chs" #-}
 acoreBind1MetasTy :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => HsName -> (mbind,m) -> t -> e -> b
 acoreBind1MetasTy n m t e = acoreBind1CatLevMetasTy (acoreBindcategDflt e) n metaLevVal m t e
 {-# INLINE acoreBind1MetasTy #-}
@@ -657,7 +657,7 @@
 -}
 
 
-{-# LINE 715 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 716 "src/ehc/AbstractCore.chs" #-}
 acoreBind1Asp1 :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => HsName -> bound -> b
 acoreBind1Asp1 n ba = acoreBind1Asp n [ba]
 {-# INLINE acoreBind1Asp1 #-}
@@ -674,7 +674,7 @@
 acoreBind1Nm1 n = acoreBind1Asp n []
 {-# INLINE acoreBind1Nm1 #-}
 
-{-# LINE 737 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 738 "src/ehc/AbstractCore.chs" #-}
 acoreBoundVal1CatLevMetaTy :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => bcat -> HsName -> MetaLev -> m -> t -> e -> bound
 acoreBoundVal1CatLevMetaTy bcat n mlev m t e = acoreBoundVal1CatLevMetasTy bcat n mlev (acoreMetabindDflt,m) t e
 {-# INLINE acoreBoundVal1CatLevMetaTy #-}
@@ -695,7 +695,7 @@
 acoreBoundVal1Cat cat n e = acoreBoundVal1CatTy cat n (acoreTyErr "acoreBoundVal1Cat") e
 {-# INLINE acoreBoundVal1Cat #-}
 
-{-# LINE 759 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 760 "src/ehc/AbstractCore.chs" #-}
 acoreBoundVal1Metas :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => HsName -> (mbind,m) -> e -> bound
 acoreBoundVal1Metas n m e = acoreBoundVal1CatLevMetasTy (acoreBindcategDflt e) n metaLevVal m (acoreTyErr "acoreBoundVal1Metas") e
 {-# INLINE acoreBoundVal1Metas #-}
@@ -705,7 +705,7 @@
 {-# INLINE acoreBoundVal1Meta #-}
 
 
-{-# LINE 770 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 771 "src/ehc/AbstractCore.chs" #-}
 acoreBound1AspkeyVal :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => ACoreBindAspectKeyS -> e -> bound
 acoreBound1AspkeyVal a e = acoreBound1MetaVal (acoreBoundmeta a 0 CLbl_None) e
 {-# INLINE acoreBound1AspkeyVal #-}
@@ -714,12 +714,12 @@
 acoreBound1Val e = acoreBound1AspkeyVal acbaspkeyDefault e
 {-# INLINE acoreBound1Val #-}
 
-{-# LINE 790 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 791 "src/ehc/AbstractCore.chs" #-}
 acoreTyErrLift :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a, Functor f) => String -> f x -> f (x,t)
 acoreTyErrLift msg = fmap (\n -> (n,acoreTyErr msg))
 {-# INLINE acoreTyErrLift #-}
 
-{-# LINE 800 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 801 "src/ehc/AbstractCore.chs" #-}
 -- | Construct let, possibly merging bindings
 acoreLetMerge :: (Eq bcat, AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => Bool -> bcat -> [b] -> e -> e
 acoreLetMerge merge c bs e
@@ -751,11 +751,11 @@
 acoreLetRec bs e = acoreLet (acoreBindcategRec) bs e
 {-# INLINE acoreLetRec #-}
 
-{-# LINE 833 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 834 "src/ehc/AbstractCore.chs" #-}
 acoreLetN :: (Eq bcat, AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => [(bcat,[b])] -> e -> e
 acoreLetN cbs e = foldr (\(c,bs) e -> acoreLet c bs e) e cbs
 
-{-# LINE 838 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 839 "src/ehc/AbstractCore.chs" #-}
 acoreLet1PlainTy :: (Eq bcat, AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => HsName -> t -> e -> e -> e
 acoreLet1PlainTy nm t e
   = acoreLet cat [acoreBind1CatTy cat nm t e]
@@ -770,7 +770,7 @@
 acoreLet1Plain nm e = acoreLet1PlainTy nm (acoreTyErr "acoreLet1Plain") e
 {-# INLINE acoreLet1Plain #-}
 
-{-# LINE 854 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 855 "src/ehc/AbstractCore.chs" #-}
 acoreLet1StrictTy :: (Eq bcat, AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => HsName -> t -> e -> e -> e
 acoreLet1StrictTy nm t e
   = acoreLet cat [acoreBind1CatTy cat nm t e]
@@ -785,7 +785,7 @@
 acoreLet1Strict nm e = acoreLet1StrictTy nm (acoreTyErr "acoreLet1Strict") e
 {-# INLINE acoreLet1Strict #-}
 
-{-# LINE 870 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 871 "src/ehc/AbstractCore.chs" #-}
 -- | evaluate an expr, with a continuation for the evaluated expr
 acoreLet1StrictInMetaTyWith :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => (t->t) -> (e->e) -> HsName -> m -> t -> e -> (e -> e) -> e
 acoreLet1StrictInMetaTyWith mkT mkE nm m t e mkC
@@ -812,20 +812,20 @@
 acoreLet1StrictIn nm e mkC = acoreLet1StrictInMeta nm acoreMetavalDflt e mkC
 {-# INLINE acoreLet1StrictIn #-}
 
-{-# LINE 902 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 903 "src/ehc/AbstractCore.chs" #-}
 acoreNmHole :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => UID -> e
 acoreNmHole = acoreVar . mkHNm
 
 acoreNmHolePred :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => PredOccId -> e
 acoreNmHolePred = acoreNmHole . poiId
 
-{-# LINE 914 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 915 "src/ehc/AbstractCore.chs" #-}
 -- | get default for bindcateg
 acoreBindcategDflt :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => e -> bcat
 acoreBindcategDflt _ = acoreBindcategPlain
 {-# INLINE acoreBindcategDflt #-}
 
-{-# LINE 925 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 926 "src/ehc/AbstractCore.chs" #-}
 acoreChar :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => EHCOpts -> Char -> e
 acoreChar opts i = let x = acoreCharTy (acoreTyChar opts) i in x
 
@@ -836,11 +836,11 @@
 acoreInt2 :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => EHCOpts -> Integer -> e
 acoreInt2 opts i = let x = acoreIntTy2 (acoreTyInt opts) i in x
 
-{-# LINE 941 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 942 "src/ehc/AbstractCore.chs" #-}
 acoreBuiltinApp :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => EHCOpts -> (EHBuiltinNames -> HsName) -> [e] -> e
 acoreBuiltinApp opts bnmOf args = acoreVar (ehcOptBuiltin opts bnmOf) `acoreApp` args
 
-{-# LINE 946 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 947 "src/ehc/AbstractCore.chs" #-}
 acoreBuiltinAddInt :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => EHCOpts -> e -> Int -> e
 acoreBuiltinAddInt opts e i
   = if i == 0
@@ -849,15 +849,15 @@
            Just (t,i') -> acoreIntTy2 t (toInteger i + i')
            _           -> acoreBuiltinApp opts ehbnPrimAddInt [e,acoreInt opts i]
 
-{-# LINE 956 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 957 "src/ehc/AbstractCore.chs" #-}
 acoreBuiltinGtInt :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => EHCOpts -> e -> Int -> e
 acoreBuiltinGtInt opts e i = acoreBuiltinApp opts ehbnPrimGtInt [e,acoreInt opts i]
 
-{-# LINE 961 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 962 "src/ehc/AbstractCore.chs" #-}
 acoreBuiltinEqChar :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => EHCOpts -> Char -> e -> e
 acoreBuiltinEqChar opts c e = acoreBuiltinApp opts ehbnPrimEqChar [e,acoreChar opts c]
 
-{-# LINE 966 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 967 "src/ehc/AbstractCore.chs" #-}
 -- | Creates a string expression.
 -- The expression represents a packed String, which can be passed to Haskell generated Core functions.
 acoreBuiltinString :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a)
@@ -866,7 +866,7 @@
     -> e
 acoreBuiltinString opts m = let x = acoreBuiltinApp opts ehbnPackedStringToString [acoreStringTy (acoreTyString opts) m] in x
 
-{-# LINE 976 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 977 "src/ehc/AbstractCore.chs" #-}
 -- | Generates an error expression, failing with the given string when evaluated. ('error' in haskell)
 acoreBuiltinError :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a)
     => EHCOpts
@@ -878,7 +878,7 @@
 acoreBuiltinUndefined :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => EHCOpts -> e
 acoreBuiltinUndefined opts = acoreBuiltinApp opts ehbnUndefined []
 
-{-# LINE 989 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 990 "src/ehc/AbstractCore.chs" #-}
 -- | Creates a Core 'Integer' constant.
 acoreBuiltinInteger :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a)
     => EHCOpts
@@ -886,13 +886,13 @@
     -> e
 acoreBuiltinInteger opts i = acoreBuiltinApp opts ehbnPackedStringToInteger [acoreStringTy (acoreTyString opts) (show i)]
 
-{-# LINE 998 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 999 "src/ehc/AbstractCore.chs" #-}
 -- | Builtin list singleton (note: hardcoded of tags)
 acoreBuiltinListSingleton :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => EHCOpts -> e -> e
 acoreBuiltinListSingleton opts e
   = acoreTagTupTy (ctagCons opts) (acoreTyErr "acoreBuiltinListSingleton.Cons") [e, acoreTagTupTy (ctagNil opts) (acoreTyErr "acoreBuiltinListSingleton.Nil") []]
 
-{-# LINE 1009 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1010 "src/ehc/AbstractCore.chs" #-}
 -- | when pat is con get tag
 acorePatConMbTag :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => p -> Maybe CTag
 acorePatConMbTag = fmap (\(tg,_,_) -> tg) . acorePatMbCon
@@ -904,25 +904,25 @@
                        -- <|> (const ctagChar)  <$> acorePatMbChar p
                 ) . fst . acoreUnAlt
 
-{-# LINE 1026 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1027 "src/ehc/AbstractCore.chs" #-}
 -- | bound name of binding
 acoreBindNm :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => b -> HsName
 acoreBindNm = fst . acoreUnBind
 {-# INLINE acoreBindNm #-}
 
-{-# LINE 1037 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1038 "src/ehc/AbstractCore.chs" #-}
 -- | bound name of binding
 acorePatFldTy :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => t -> (HsName,e) -> HsName -> pf
 acorePatFldTy t lbloff n = acorePatFldBind lbloff (acoreBind1NmTy1 n t)
 {-# INLINE acorePatFldTy #-}
 
-{-# LINE 1048 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1049 "src/ehc/AbstractCore.chs" #-}
 -- | possible expr of bound (may panic)
 acoreUnBoundVal :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => bound -> e
 acoreUnBoundVal = maybe (panic "acoreBoundMbVal") (\(_,a) -> a) . acoreBoundMbVal
 {-# INLINE acoreUnBoundVal #-}
 
-{-# LINE 1059 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1060 "src/ehc/AbstractCore.chs" #-}
 -- | Construct 'if' expression. Hardcoded: tag nr, ordered alts (by tag)
 acoreIf :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => EHCOpts -> Maybe HsName -> e -> e -> e -> e
 acoreIf opts cn c t f
@@ -934,12 +934,12 @@
                Nothing {-(tcUndefined opts)-}
       )
 
-{-# LINE 1072 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1073 "src/ehc/AbstractCore.chs" #-}
 acoreMatchChar :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => EHCOpts -> Maybe HsName -> Char -> e -> e -> e -> e
 acoreMatchChar opts cn cchar cexpr t f
   = acoreIf opts cn (acoreBuiltinEqChar opts cchar cexpr) t f
 
-{-# LINE 1102 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1103 "src/ehc/AbstractCore.chs" #-}
 data Coe' expr metaval bind bindasp ty
   = Coe_Map             !(expr -> expr)                 -- normal, expression as function
   | Coe_C               !expr                           -- constant
@@ -958,7 +958,7 @@
 instance Show (Coe' expr metaval bind bindasp ty) where
   show _ = "COE"
 
-{-# LINE 1139 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1140 "src/ehc/AbstractCore.chs" #-}
 -- | Coercions may either be applied or not on type arguments.
 --   In particular, due to lack of proper analysis (and generics code like generation),
 --   it is only known for arrow and product types how to construct a coercion from its type args, as they directly
@@ -971,7 +971,7 @@
   | CoeCtx_DontAllow
   deriving (Eq,Show)
 
-{-# LINE 1157 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1158 "src/ehc/AbstractCore.chs" #-}
 -- | Non inspectable, most general, coercion
 acoreCoeMap :: (e -> e) -> Coe' e m b ba t
 acoreCoeMap = Coe_Map
@@ -982,7 +982,7 @@
 acoreCoeId = Coe_C acoreCoeArg
 {-# INLINE acoreCoeId #-}
 
-{-# LINE 1169 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1170 "src/ehc/AbstractCore.chs" #-}
 acoreCoeLamLetTy :: HsName -> t -> UID -> Coe' e m b ba t
 acoreCoeLamLetTy = Coe_LamLet
 {-# INLINE acoreCoeLamLetTy #-}
@@ -996,7 +996,7 @@
 acoreCoeLetRec [] = acoreCoeId
 acoreCoeLetRec bs = Coe_LetRec bs
 
-{-# LINE 1184 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1185 "src/ehc/AbstractCore.chs" #-}
 -- | Application still requiring a function
 acoreCoeApp1 :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => e -> Coe' e m b ba t
 acoreCoeApp1 = Coe_App1 -- a acoreMetavalDflt
@@ -1013,7 +1013,7 @@
 acoreCoeAppN as = acoreCoeMap (\e -> acoreApp e as)
 {-# INLINE acoreCoeAppN #-}
 
-{-# LINE 1202 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1203 "src/ehc/AbstractCore.chs" #-}
 -- | Lambda still requiring a body
 acoreCoeLam1Ty :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => HsName -> t -> Coe' e m b ba t
 acoreCoeLam1Ty = Coe_Lam
@@ -1023,7 +1023,7 @@
 acoreCoeLam1 n = acoreCoeLam1Ty n (acoreTyErr "acoreCoeLam1")
 {-# INLINE acoreCoeLam1 #-}
 
-{-# LINE 1213 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1214 "src/ehc/AbstractCore.chs" #-}
 -- | Composition of 2 Coe's
 acoreCoeCompose :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => Coe' e m b ba t -> Coe' e m b ba t -> Coe' e m b ba t
 acoreCoeCompose c1 c2
@@ -1031,14 +1031,14 @@
   | otherwise  = Coe_Compose c1 c2
 
 
-{-# LINE 1222 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1223 "src/ehc/AbstractCore.chs" #-}
 acoreCoePoiLApp :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => [PredOccId] -> [Coe' e m b ba t]
 acoreCoePoiLApp = map (\i -> acoreCoeApp1 (acoreNmHolePred i))
 
 acoreCoeImplsApp :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => Impls -> [Coe' e m b ba t]
 acoreCoeImplsApp = acoreCoePoiLApp . implsPrIdL
 
-{-# LINE 1230 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1231 "src/ehc/AbstractCore.chs" #-}
 acoreCoePoiLLamTy :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => Coe' e m b ba t -> [(PredOccId,t)] -> [Coe' e m b ba t]
 acoreCoePoiLLamTy onLast poiL
   =  case map mk poiL of
@@ -1051,19 +1051,19 @@
 acoreCoeImplsLam :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => Coe' e m b ba t -> Impls -> [Coe' e m b ba t]
 acoreCoeImplsLam onLast is = acoreCoePoiLLamTy onLast (acoreTyErrLift "acoreCoeImplsLam" (implsPrIdL is))
 
-{-# LINE 1248 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1249 "src/ehc/AbstractCore.chs" #-}
 acoreCoeIsId :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => Coe' e m b ba t -> Bool
 acoreCoeIsId (Coe_C e) = acoreExprIsCoeArg e
 acoreCoeIsId _         = False
 
-{-# LINE 1258 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1259 "src/ehc/AbstractCore.chs" #-}
 data CSubstKey
   = CSKey_UID   UID
   | CSKey_Nm    HsName
   | CSKey_Ref   ACoreBindRef
   deriving (Show,Eq,Ord)
 
-{-# LINE 1266 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1267 "src/ehc/AbstractCore.chs" #-}
 data CSubstInfo' expr metaval bind bindasp ty
   =  CSITy        { csiTy      :: !ty
                   }
@@ -1078,37 +1078,37 @@
 instance Show (CSubstInfo' e m b ba t) where
   show _ = "CSubstInfo'"
 
-{-# LINE 1284 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1285 "src/ehc/AbstractCore.chs" #-}
 type CSubst' e m b ba t = Map.Map CSubstKey (CSubstInfo' e m b ba t)
 
 emptyCSubst :: CSubst' e m b ba t
 emptyCSubst = Map.empty
 
-{-# LINE 1295 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1296 "src/ehc/AbstractCore.chs" #-}
 acoreCSubstFromNmTyL :: AssocL HsName t -> CSubst' e m b ba t
 acoreCSubstFromNmTyL l = Map.fromList [ (CSKey_Nm k,CSITy v) | (k,v) <- l ]
 
-{-# LINE 1300 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1301 "src/ehc/AbstractCore.chs" #-}
 acoreCSubstFromRefExprL :: AssocL ACoreBindRef e -> CSubst' e m b ba t
 acoreCSubstFromRefExprL l = Map.fromList [ (CSKey_Ref k,CSIExpr v) | (k,v) <- l ]
 
-{-# LINE 1305 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1306 "src/ehc/AbstractCore.chs" #-}
 acoreCSubstFromUidExprL :: AssocL UID e -> CSubst' e m b ba t
 acoreCSubstFromUidExprL l = Map.fromList [ (CSKey_UID k,CSIExpr v) | (k,v) <- l ]
 
-{-# LINE 1310 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1311 "src/ehc/AbstractCore.chs" #-}
 acoreCSubstFromUidBindLL :: AssocL UID [b] -> CSubst' e m b ba t
 acoreCSubstFromUidBindLL l = Map.fromList [ (CSKey_UID k,CSIBinds v) | (k,v) <- l ]
 
 acoreCSubstFromUidImplsL :: AssocL UID ([Coe' e m b ba t],[Coe' e m b ba t]) -> CSubst' e m b ba t
 acoreCSubstFromUidImplsL l = Map.fromList [ (CSKey_UID k,uncurry CSIImpls v) | (k,v) <- l ]
 
-{-# LINE 1322 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1323 "src/ehc/AbstractCore.chs" #-}
 -- | Combine CSubst: union only, application is postponed
 cSubstAppSubst :: CSubst' e m b ba t -> CSubst' e m b ba t -> CSubst' e m b ba t
 cSubstAppSubst = Map.union
 
-{-# LINE 1332 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1333 "src/ehc/AbstractCore.chs" #-}
 infixr `cSubstApp`
 
 class CSubstitutable       e m b ba t a
@@ -1119,7 +1119,7 @@
 instance CSubstitutable e m b ba t (CSubst' e m b ba t) where
   cSubstApp cs s = cs `cSubstAppSubst` s
 
-{-# LINE 1348 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1349 "src/ehc/AbstractCore.chs" #-}
 data RAlt' e t b pr
   = RAlt_Alt            { rcaPats :: ![RPat' e t b pr], raaExpr :: !e, raaFailS :: UIDS }
 
@@ -1140,14 +1140,14 @@
 
 type RCEAltL' e t b pr = [RAlt' e t b pr]
 
-{-# LINE 1372 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1373 "src/ehc/AbstractCore.chs" #-}
 rcaPat :: RAlt' e t b pr -> RPat' e t b pr
 rcaPat = head . rcaPats
 
 raltLPatNms :: [RAlt' e t b pr] -> [RPatNm]
 raltLPatNms = nub . sort . map (rcpPNm . rcaPat)
 
-{-# LINE 1380 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1381 "src/ehc/AbstractCore.chs" #-}
 rpatConTag :: RPat' e t b pr -> CTag
 rpatConTag (RPat_Int  _ _ _ )  = ctagInt
 rpatConTag (RPat_Char _ _ _ )  = ctagChar
@@ -1156,7 +1156,7 @@
 rcaTag :: RAlt' e t b pr -> CTag
 rcaTag = rpatConTag . head . rcaPats
 
-{-# LINE 1390 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1391 "src/ehc/AbstractCore.chs" #-}
 raltIsVar :: RAlt' e t b pr -> Bool
 raltIsVar (RAlt_Alt (RPat_Var _ _ _ : _) _ _)  = True
 raltIsVar _                                    = False
@@ -1168,17 +1168,17 @@
         c (RPat_Char  _ _ _) = True
         c _                  = False
 
-{-# LINE 1403 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1404 "src/ehc/AbstractCore.chs" #-}
 raltIsConMany :: RAlt' e t b pr -> Bool
 raltIsConMany (RAlt_Alt (RPat_Con _ _ _ (RPatConBind_Many _) : _) _ _) = True
 raltIsConMany _                                                        = False
 
-{-# LINE 1409 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1410 "src/ehc/AbstractCore.chs" #-}
 raltIsIrrefutable :: RAlt' e t b pr -> Bool
 raltIsIrrefutable (RAlt_Alt (RPat_Irrefutable _ _ _ : _) _ _) = True
 raltIsIrrefutable _                                           = False
 
-{-# LINE 1415 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1416 "src/ehc/AbstractCore.chs" #-}
 raltMbBoolExpr :: RAlt' e t b pr -> Maybe (Maybe SrcConst)
 raltMbBoolExpr (RAlt_Alt (RPat_BoolExpr _ _ _ e : _) _ _)  = Just e
 raltMbBoolExpr _                                           = Nothing
@@ -1186,13 +1186,13 @@
 raltIsBoolExpr :: RAlt' e t b pr -> Bool
 raltIsBoolExpr = isJust . raltMbBoolExpr
 
-{-# LINE 1426 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1427 "src/ehc/AbstractCore.chs" #-}
 rpatConBindUnFlatten :: RPatConBind' e t b pr -> [RPatConBind' e t b pr] -> RPatConBind' e t b pr
 rpatConBindUnFlatten z []  = z
 rpatConBindUnFlatten _ [b] = b
 rpatConBindUnFlatten _ bs  = RPatConBind_Many bs
 
-{-# LINE 1437 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1438 "src/ehc/AbstractCore.chs" #-}
 acoreRPat2Pat :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => RPat' e t b pr -> p
 acoreRPat2Pat p
   = case p of
@@ -1203,7 +1203,7 @@
       RPat_Char     n ty v    -> acorePatCharTy ty v
       RPat_BoolExpr n _  v _  -> acorePatBoolExpr  v
 
-{-# LINE 1451 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1452 "src/ehc/AbstractCore.chs" #-}
 acoreRPatConBind2PatConBind :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => RPatConBind' e t b pr -> (pr,[pf])
 acoreRPatConBind2PatConBind b
   = case b of
@@ -1213,17 +1213,17 @@
 acoreRPatBind2PatFld :: (AbstractCore e m b bound boundmeta bcat mbind t p pr pf a) => RPatFld' e t b pr -> pf
 acoreRPatBind2PatFld (RPatFld_Fld l o _ p@(RPat_Var n _ _)) = acorePatFldTy (rcpTy p) (l,o) (rpatNmNm n)
 
-{-# LINE 1468 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1469 "src/ehc/AbstractCore.chs" #-}
 ctagTrue, ctagFalse :: EHCOpts -> CTag
 ctagTrue  opts = CTag (ehcOptBuiltin opts ehbnDataBool) (ehcOptBuiltin opts ehbnBoolTrue)  tagBoolTrue  0 0        -- this makes it hardcoded, ideally dependent on datatype def itself !!
 ctagFalse opts = CTag (ehcOptBuiltin opts ehbnDataBool) (ehcOptBuiltin opts ehbnBoolFalse) tagBoolFalse 0 0        -- this makes it hardcoded, ideally dependent on datatype def itself !!
 
-{-# LINE 1480 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1481 "src/ehc/AbstractCore.chs" #-}
 ctagCons, ctagNil :: EHCOpts -> CTag
 ctagCons opts = CTag (ehcOptBuiltin opts ehbnDataList) (ehcOptBuiltin opts ehbnDataListAltCons) tagListCons 2 2       -- this makes it hardcoded, ideally dependent on datatype def itself !!
 ctagNil  opts = CTag (ehcOptBuiltin opts ehbnDataList) (ehcOptBuiltin opts ehbnDataListAltNil ) tagListNil  0 2       -- this makes it hardcoded, ideally dependent on datatype def itself !!
 
-{-# LINE 1490 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1491 "src/ehc/AbstractCore.chs" #-}
 -- | Reason to fail a case alternative
 data CaseAltFailReason
   = CaseAltFailReason_Absence                   -- failed because of absence
@@ -1236,23 +1236,23 @@
   pp (CaseAltFailReason_Continue i) = pp i
   pp (CaseAltFailReason_Absence   ) = pp "absent"
 
-{-# LINE 1504 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1505 "src/ehc/AbstractCore.chs" #-}
 cafailHasId :: CaseAltFailReason -> (Bool,UID)
 cafailHasId (CaseAltFailReason_Absence   ) = (False,uidUnused)
 cafailHasId (CaseAltFailReason_Continue i) = (True ,i)
 
-{-# LINE 1510 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1511 "src/ehc/AbstractCore.chs" #-}
 deriving instance Typeable CaseAltFailReason
 deriving instance Data CaseAltFailReason
 
-{-# LINE 1519 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1520 "src/ehc/AbstractCore.chs" #-}
 data AppFunKind
   = AppFunKind_NoApp                    -- inlined Nothing
   | AppFunKind_Fun  ACoreBindRef
   | AppFunKind_Tag  CTag
   | AppFunKind_FFI
 
-{-# LINE 1531 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1532 "src/ehc/AbstractCore.chs" #-}
 
 -- | What kind of Expr?
 data WhatExpr
@@ -1269,7 +1269,7 @@
   | ExprIsBind 	HsName
   deriving Eq
 
-{-# LINE 1549 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1550 "src/ehc/AbstractCore.chs" #-}
 -- | is an var?
 whatExprMbVar :: WhatExpr -> Maybe HsName
 whatExprMbVar (ExprIsVar a) = Just a
@@ -1300,7 +1300,7 @@
 whatExprAppArity (ExprIsApp a _) = a
 whatExprAppArity _               = 0
 
-{-# LINE 1581 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1582 "src/ehc/AbstractCore.chs" #-}
 whatExprIsWHNF :: WhatExpr -> Bool
 whatExprIsWHNF (ExprIsLam _ _) 	= True
 whatExprIsWHNF (ExprIsVar _) 	= True
@@ -1309,7 +1309,7 @@
 whatExprIsWHNF ExprIsOtherWHNF 	= True
 whatExprIsWHNF _ 				= False
 
-{-# LINE 1591 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1592 "src/ehc/AbstractCore.chs" #-}
 whatExprIsBind :: WhatExpr -> Bool
 whatExprIsBind = isJust . whatExprMbBind
 {-# INLINE whatExprIsBind #-}
@@ -1324,14 +1324,14 @@
 whatExprIsTup _             = False
 
 
-{-# LINE 1607 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1608 "src/ehc/AbstractCore.chs" #-}
 -- | Is Expr a FFI?
 whatExprIsFFI :: WhatExpr -> Bool
 whatExprIsFFI (ExprIsFFI  ) = True
 whatExprIsFFI _             = False
 
 
-{-# LINE 1625 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1626 "src/ehc/AbstractCore.chs" #-}
 instance Serialize ACoreBindAspectKey where
   sput (ACoreBindAspectKey_Default       ) = sputWord8 0
   sput (ACoreBindAspectKey_Strict        ) = sputWord8 1
@@ -1351,12 +1351,12 @@
         5 -> return ACoreBindAspectKey_Core
         7 -> return ACoreBindAspectKey_FusionRole
 
-{-# LINE 1656 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1657 "src/ehc/AbstractCore.chs" #-}
 instance Serialize ACoreBindRef where
   sput (ACoreBindRef a b) = sput a >> sput b
   sget = liftM2 ACoreBindRef sget sget
 
-{-# LINE 1662 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1663 "src/ehc/AbstractCore.chs" #-}
 instance Serialize CaseAltFailReason where
   sput (CaseAltFailReason_Continue a) = sputWord8 0 >> sput a
   sput (CaseAltFailReason_Absence   ) = sputWord8 1
@@ -1366,13 +1366,13 @@
       0 -> liftM  CaseAltFailReason_Continue sget
       1 -> return CaseAltFailReason_Absence
 
-{-# LINE 1677 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1678 "src/ehc/AbstractCore.chs" #-}
 instance PP CSubstKey where
   pp (CSKey_UID i)  = pp i
   pp (CSKey_Nm  n)  = pp n
   pp (CSKey_Ref r)  = pp r
 
-{-# LINE 1684 "src/ehc/AbstractCore.chs" #-}
+{-# LINE 1685 "src/ehc/AbstractCore.chs" #-}
 instance (PP expr, PP ty) => PP (CSubstInfo' expr metaval bind bindasp ty) where
   pp (CSITy         t    )  = pp t
   pp (CSIExpr       e    )  = pp e
diff --git a/src/UHC/Light/Compiler/AnaDomain.hs b/src/UHC/Light/Compiler/AnaDomain.hs
--- a/src/UHC/Light/Compiler/AnaDomain.hs
+++ b/src/UHC/Light/Compiler/AnaDomain.hs
@@ -37,10 +37,6 @@
 import Control.Monad hiding (join)
 import UHC.Util.Serialize
 import UHC.Util.Control.Monad (liftM6)
-import Data.Typeable (Typeable)
-import Data.Generics (Data)
-
-
 
 
 
diff --git a/src/UHC/Light/Compiler/Base/Common.hs b/src/UHC/Light/Compiler/Base/Common.hs
--- a/src/UHC/Light/Compiler/Base/Common.hs
+++ b/src/UHC/Light/Compiler/Base/Common.hs
@@ -1,10 +1,12 @@
 {-# LANGUAGE CPP #-}
 
 module UHC.Light.Compiler.Base.Common
-( module UHC.Light.Compiler.Base.HsName
+( module UHC.Util.Hashable
+, module UHC.Light.Compiler.Base.HsName
 , module UHC.Light.Compiler.Base.Range
 , module UHC.Light.Compiler.Base.UID
 , module UHC.Util.AssocL
+, module Data.Typeable, module Data.Generics
 , ppAppTop
 , ppCon, ppCmt
 , ppSpaced
@@ -77,11 +79,14 @@
 , graphVisit )
 where
 import UHC.Util.Utils
+import UHC.Util.Hashable
 import UHC.Light.Compiler.Base.HsName
 import UHC.Light.Compiler.Base.HsName.Builtin
 import UHC.Light.Compiler.Base.Range
 import UHC.Light.Compiler.Base.UID
 import UHC.Util.AssocL
+import Data.Typeable (Typeable)
+import Data.Generics (Data)
 import UHC.Util.Pretty
 import Data.List
 import Control.Applicative ((<|>))
@@ -106,6 +111,8 @@
 import UHC.Light.Compiler.Base.RLList
 import UHC.Util.Binary
 import UHC.Util.Serialize
+import GHC.Generics (Generic)
+import Data.Version
 
 
 
@@ -115,7 +122,14 @@
 
 
 
-{-# LINE 94 "src/ehc/Base/Common.chs" #-}
+
+
+{-# LINE 104 "src/ehc/Base/Common.chs" #-}
+deriving instance Generic Version
+
+instance Hashable Version
+
+{-# LINE 114 "src/ehc/Base/Common.chs" #-}
 ppHsnEscapeWith :: Char -> (Char -> Bool) -> (String -> Bool) -> (HsName -> Bool) -> HsName -> (PP_Doc,Bool)
 ppHsnEscapeWith escChar okChars notOkStr leaveAsIs n = flip ST.runState False $ do
     let shown = hsnShow' showUIDParseable show (\s -> "{" ++ s ++ "}") "." "``" n
@@ -161,29 +175,29 @@
                         let s = foldr (\c r -> if c `Set.member` escapeeChars then '$':c:r else c:r) [] name
                          in  pp ('$':s)
 
-{-# LINE 145 "src/ehc/Base/Common.chs" #-}
+{-# LINE 165 "src/ehc/Base/Common.chs" #-}
 newtype PredOccId
   = PredOccId
       { poiId       :: UID
       }
   deriving (Show,Eq,Ord)
 
-{-# LINE 153 "src/ehc/Base/Common.chs" #-}
+{-# LINE 173 "src/ehc/Base/Common.chs" #-}
 mkPrId :: UID -> PredOccId
 mkPrId u = PredOccId u
 
 poiHNm :: PredOccId -> HsName
 poiHNm = uidHNm . poiId
 
-{-# LINE 161 "src/ehc/Base/Common.chs" #-}
+{-# LINE 181 "src/ehc/Base/Common.chs" #-}
 mkPrIdCHR :: UID -> PredOccId
 mkPrIdCHR = mkPrId
 
-{-# LINE 166 "src/ehc/Base/Common.chs" #-}
+{-# LINE 186 "src/ehc/Base/Common.chs" #-}
 emptyPredOccId :: PredOccId
 emptyPredOccId = mkPrId uidStart
 
-{-# LINE 175 "src/ehc/Base/Common.chs" #-}
+{-# LINE 195 "src/ehc/Base/Common.chs" #-}
 ppAppTop :: PP arg => (HsName,arg) -> [arg] -> PP_Doc -> PP_Doc
 ppAppTop (conNm,con) argL dflt
   =  if       (  hsnIsArrow conNm
@@ -197,12 +211,12 @@
      else if  hsnIsRow   conNm  then  ppListSep (hsnORow >|< con) hsnCRow "," argL
                                 else  dflt
 
-{-# LINE 196 "src/ehc/Base/Common.chs" #-}
+{-# LINE 216 "src/ehc/Base/Common.chs" #-}
 ppAppTop' :: PP arg => (HsName,arg) -> [arg] -> [Bool] -> PP_Doc -> PP_Doc
 ppAppTop' cc@(conNm,_) [_,a] [True,_] _ | hsnIsArrow conNm || hsnIsPrArrow conNm    = pp a
 ppAppTop' cc argL _ dflt                                                            = ppAppTop cc argL dflt
 
-{-# LINE 202 "src/ehc/Base/Common.chs" #-}
+{-# LINE 222 "src/ehc/Base/Common.chs" #-}
 ppCon :: HsName -> PP_Doc
 ppCon nm =  if    hsnIsProd nm
             then  ppParens (text (replicate (hsnProdArity nm - 1) ','))
@@ -211,17 +225,17 @@
 ppCmt :: PP_Doc -> PP_Doc
 ppCmt p = "{-" >#< p >#< "-}"
 
-{-# LINE 212 "src/ehc/Base/Common.chs" #-}
+{-# LINE 232 "src/ehc/Base/Common.chs" #-}
 ppSemi :: PP x => x -> PP_Doc
 ppSemi = (>|< ";")
 
-{-# LINE 217 "src/ehc/Base/Common.chs" #-}
+{-# LINE 237 "src/ehc/Base/Common.chs" #-}
 
 ppSpaced :: PP a => [a] -> PP_Doc
 ppSpaced = ppListSep "" "" " "
 
 
-{-# LINE 224 "src/ehc/Base/Common.chs" #-}
+{-# LINE 244 "src/ehc/Base/Common.chs" #-}
 ppFld :: String -> Maybe HsName -> HsName -> PP_Doc -> PP_Doc -> PP_Doc
 ppFld sep positionalNm nm nmPP f
   = case positionalNm of
@@ -234,7 +248,7 @@
 mkPPAppFun :: HsName -> PP_Doc -> PP_Doc
 mkPPAppFun = mkPPAppFun' "|"
 
-{-# LINE 238 "src/ehc/Base/Common.chs" #-}
+{-# LINE 258 "src/ehc/Base/Common.chs" #-}
 mkExtAppPP' :: String -> (HsName,PP_Doc,[PP_Doc]) -> (HsName,PP_Doc,[PP_Doc],PP_Doc) -> (PP_Doc,[PP_Doc])
 mkExtAppPP' sep (funNm,funNmPP,funPPL) (argNm,argNmPP,argPPL,argPP)
   =  if hsnIsRec funNm || hsnIsSum funNm
@@ -244,23 +258,23 @@
 mkExtAppPP :: (HsName,PP_Doc,[PP_Doc]) -> (HsName,PP_Doc,[PP_Doc],PP_Doc) -> (PP_Doc,[PP_Doc])
 mkExtAppPP = mkExtAppPP' "|"
 
-{-# LINE 254 "src/ehc/Base/Common.chs" #-}
+{-# LINE 274 "src/ehc/Base/Common.chs" #-}
 ppPair :: (PP a, PP b) => (a,b) -> PP_Doc
 ppPair (x,y) = ppParens (pp x >|< "," >|< pp y)
 
-{-# LINE 259 "src/ehc/Base/Common.chs" #-}
+{-# LINE 279 "src/ehc/Base/Common.chs" #-}
 showPP :: PP a => a -> String
 showPP x = disp (pp x) 100 ""
 
-{-# LINE 264 "src/ehc/Base/Common.chs" #-}
+{-# LINE 284 "src/ehc/Base/Common.chs" #-}
 ppFM :: (PP k,PP v) => Map.Map k v -> PP_Doc
 ppFM = ppAssocL . Map.toList
 
-{-# LINE 269 "src/ehc/Base/Common.chs" #-}
+{-# LINE 289 "src/ehc/Base/Common.chs" #-}
 ppListV :: PP a => [a] -> PP_Doc
 ppListV = vlist . map pp
 
-{-# LINE 278 "src/ehc/Base/Common.chs" #-}
+{-# LINE 298 "src/ehc/Base/Common.chs" #-}
 putCompileMsg :: Verbosity -> Verbosity -> String -> Maybe String -> HsName -> FPath -> IO ()
 putCompileMsg v optsVerbosity msg mbMsg2 modNm fNm
   = if optsVerbosity >= v
@@ -269,7 +283,7 @@
             }
     else return ()
 
-{-# LINE 288 "src/ehc/Base/Common.chs" #-}
+{-# LINE 308 "src/ehc/Base/Common.chs" #-}
 writePP ::  (a -> PP_Doc) -> a -> FPath -> IO ()
 writePP f text fp = writeToFile (show.f $ text) fp
 
@@ -284,7 +298,7 @@
 writeToFile = writeToFile' False
 
 
-{-# LINE 313 "src/ehc/Base/Common.chs" #-}
+{-# LINE 333 "src/ehc/Base/Common.chs" #-}
 data ParNeed =  ParNotNeeded | ParNeededLow | ParNeeded | ParNeededHigh | ParOverrideNeeded
                 deriving (Eq,Ord)
 
@@ -301,13 +315,13 @@
               | otherwise           =  (ParNeeded,repeat ParNeededHigh)
      in   pr
 
-{-# LINE 335 "src/ehc/Base/Common.chs" #-}
+{-# LINE 355 "src/ehc/Base/Common.chs" #-}
 ppParNeed :: PP p => ParNeed -> ParNeed -> p -> PP_Doc
 ppParNeed locNeed globNeed p
   = par (pp p)
   where par = if globNeed > locNeed then ppParens else id
 
-{-# LINE 361 "src/ehc/Base/Common.chs" #-}
+{-# LINE 381 "src/ehc/Base/Common.chs" #-}
 -- | Expressions in a CBound position optionally may be labelled
 data CLbl
   = CLbl_None
@@ -324,53 +338,53 @@
 clbl _ f _ (CLbl_Nm  n) = f n
 clbl _ _ f (CLbl_Tag t) = f t
 
-{-# LINE 379 "src/ehc/Base/Common.chs" #-}
+{-# LINE 399 "src/ehc/Base/Common.chs" #-}
 instance PP CLbl where
   pp = clbl empty pp pp
 
-{-# LINE 388 "src/ehc/Base/Common.chs" #-}
+{-# LINE 408 "src/ehc/Base/Common.chs" #-}
 data Unbox
   = Unbox_FirstField
   | Unbox_Tag         !Int
   | Unbox_None
 
-{-# LINE 399 "src/ehc/Base/Common.chs" #-}
+{-# LINE 419 "src/ehc/Base/Common.chs" #-}
 unions :: Eq a => [[a]] -> [a]
 unions = foldr union []
 
-{-# LINE 404 "src/ehc/Base/Common.chs" #-}
+{-# LINE 424 "src/ehc/Base/Common.chs" #-}
 listCombineUniq :: Eq a => [[a]] -> [a]
 listCombineUniq = nub . concat
 
-{-# LINE 424 "src/ehc/Base/Common.chs" #-}
+{-# LINE 444 "src/ehc/Base/Common.chs" #-}
 replicateBy :: [a] -> b -> [b]
 replicateBy l e = replicate (length l) e
 
-{-# LINE 433 "src/ehc/Base/Common.chs" #-}
+{-# LINE 453 "src/ehc/Base/Common.chs" #-}
 strPadLeft :: Char -> Int -> String -> String
 strPadLeft c n s = replicate (n - length s) c ++ s
 
 strBlankPad :: Int -> String -> String
 strBlankPad n s = s ++ replicate (n - length s) ' '
 
-{-# LINE 441 "src/ehc/Base/Common.chs" #-}
+{-# LINE 461 "src/ehc/Base/Common.chs" #-}
 snd3 :: (a,b,c) -> b
 snd3 (a,b,c) = b
 
 thd :: (a,b,c) -> c
 thd (a,b,c) = c
 
-{-# LINE 453 "src/ehc/Base/Common.chs" #-}
+{-# LINE 473 "src/ehc/Base/Common.chs" #-}
 data Verbosity
   = VerboseQuiet | VerboseMinimal | VerboseNormal | VerboseALot | VerboseDebug
   deriving (Eq,Ord,Enum)
 
-{-# LINE 463 "src/ehc/Base/Common.chs" #-}
+{-# LINE 483 "src/ehc/Base/Common.chs" #-}
 data CHRScoped
   = CHRScopedInstOnly | CHRScopedMutualSuper | CHRScopedAll
   deriving (Eq,Ord)
 
-{-# LINE 473 "src/ehc/Base/Common.chs" #-}
+{-# LINE 493 "src/ehc/Base/Common.chs" #-}
 data CompilePoint
   = CompilePoint_Imports
   | CompilePoint_Parse
@@ -380,7 +394,7 @@
   | CompilePoint_All
   deriving (Eq,Ord,Show)
 
-{-# LINE 490 "src/ehc/Base/Common.chs" #-}
+{-# LINE 510 "src/ehc/Base/Common.chs" #-}
 data Fixity
   = Fixity_Infix | Fixity_Infixr | Fixity_Infixl
   deriving (Eq,Ord,Show,Enum)
@@ -390,28 +404,28 @@
   pp Fixity_Infixl = pp "infixl"
   pp Fixity_Infixr = pp "infixr"
 
-{-# LINE 501 "src/ehc/Base/Common.chs" #-}
+{-# LINE 521 "src/ehc/Base/Common.chs" #-}
 fixityMaxPrio :: Int
 fixityMaxPrio = 9
 
-{-# LINE 506 "src/ehc/Base/Common.chs" #-}
+{-# LINE 526 "src/ehc/Base/Common.chs" #-}
 fixityAppPrio :: Int
 fixityAppPrio = fixityMaxPrio + 1
 
-{-# LINE 515 "src/ehc/Base/Common.chs" #-}
+{-# LINE 535 "src/ehc/Base/Common.chs" #-}
 data InstVariant
   = InstNormal | InstDefault
   | InstDeriving InstDerivingFrom
   deriving (Eq,Ord,Show)
 
-{-# LINE 524 "src/ehc/Base/Common.chs" #-}
+{-# LINE 544 "src/ehc/Base/Common.chs" #-}
 -- | Either a deriving combined from a datatype directly or a standalone
 data InstDerivingFrom
   = InstDerivingFrom_Datatype
   | InstDerivingFrom_Standalone
   deriving (Eq,Ord,Show)
 
-{-# LINE 536 "src/ehc/Base/Common.chs" #-}
+{-# LINE 556 "src/ehc/Base/Common.chs" #-}
 type NmLev = Int
 
 nmLevAbsent, nmLevBuiltin, nmLevOutside, nmLevModule :: NmLev
@@ -421,7 +435,7 @@
 nmLevModule  =  0
 
 
-{-# LINE 557 "src/ehc/Base/Common.chs" #-}
+{-# LINE 577 "src/ehc/Base/Common.chs" #-}
 -- Assumption: tokTpIsInt (genTokTp t) == True
 tokMkInt :: Token -> Int
 tokMkInt t
@@ -433,28 +447,28 @@
 tokMkStr :: Token -> String
 tokMkStr = tokenVal
 
-{-# LINE 575 "src/ehc/Base/Common.chs" #-}
+{-# LINE 595 "src/ehc/Base/Common.chs" #-}
 tokMkQName :: Token -> HsName
 tokMkQName t
   = case genTokTp t of
       Just tp | tokTpIsInt tp -> mkHNmPos $ tokMkInt t
       _                       -> mkHNm $ map hsnFromString $ tokenVals t
 
-{-# LINE 585 "src/ehc/Base/Common.chs" #-}
+{-# LINE 605 "src/ehc/Base/Common.chs" #-}
 tokMkQNames :: [Token] -> [HsName]
 tokMkQNames = map tokMkQName
 
 instance HSNM Token where
   mkHNm = tokMkQName
 
-{-# LINE 597 "src/ehc/Base/Common.chs" #-}
+{-# LINE 617 "src/ehc/Base/Common.chs" #-}
 hsnLclSupplyWith :: HsName -> [HsName]
 hsnLclSupplyWith n = map (\i -> hsnSuffix n $ "_" ++ show i) [1..]
 
 hsnLclSupply :: [HsName]
 hsnLclSupply = hsnLclSupplyWith (hsnFromString "")
 
-{-# LINE 609 "src/ehc/Base/Common.chs" #-}
+{-# LINE 629 "src/ehc/Base/Common.chs" #-}
 splitByRadix :: (Integral b) => Int -> Int -> b -> (Int,[Int])
 splitByRadix len radix num
   = ( fromIntegral $ signum num
@@ -470,19 +484,19 @@
                  (abs num)
         difflen = len - length repr
 
-{-# LINE 626 "src/ehc/Base/Common.chs" #-}
+{-# LINE 646 "src/ehc/Base/Common.chs" #-}
 strHex :: (Show a, Integral a) => Int -> a -> String
 strHex prec x
   = replicate (prec - length h) '0' ++ h
   where h = showHex x []
 
-{-# LINE 637 "src/ehc/Base/Common.chs" #-}
+{-# LINE 657 "src/ehc/Base/Common.chs" #-}
 data Backend
   = BackendGrinByteCode
   | BackendSilly
   deriving (Eq, Ord)
 
-{-# LINE 648 "src/ehc/Base/Common.chs" #-}
+{-# LINE 668 "src/ehc/Base/Common.chs" #-}
 data VarUIDHsName
   = VarUIDHs_Name       { vunmId :: !UID, vunmNm' :: !HsName }
   | VarUIDHs_UID        { vunmId :: !UID }
@@ -494,12 +508,12 @@
 vunmNm (VarUIDHs_UID  i  ) = mkHNm i
 vunmNm _                   = panic "Common.assnmNm"
 
-{-# LINE 661 "src/ehc/Base/Common.chs" #-}
+{-# LINE 681 "src/ehc/Base/Common.chs" #-}
 vunmMbVar :: VarUIDHsName -> Maybe UID
 vunmMbVar (VarUIDHs_Var v) = Just v
 vunmMbVar _                = Nothing
 
-{-# LINE 667 "src/ehc/Base/Common.chs" #-}
+{-# LINE 687 "src/ehc/Base/Common.chs" #-}
 instance Show VarUIDHsName where
   show (VarUIDHs_Name _ n) = show n
   show (VarUIDHs_UID  i  ) = show i
@@ -508,7 +522,7 @@
 instance PP VarUIDHsName where
   pp a = pp $ show a
 
-{-# LINE 681 "src/ehc/Base/Common.chs" #-}
+{-# LINE 701 "src/ehc/Base/Common.chs" #-}
 withLkupLiftCyc2 :: (t -> Maybe UID) -> (t -> UIDS) -> (UID -> Maybe t) -> x -> (UIDS -> t -> x) -> (t -> x) -> UIDS -> UID -> x
 withLkupLiftCyc2 get noVisit lookup dflt yes no vsVisited v
   = case lookup v of
@@ -516,7 +530,7 @@
         -> yes (Set.insert v $ Set.union (noVisit t) vsVisited) t
       _ -> dflt
 
-{-# LINE 690 "src/ehc/Base/Common.chs" #-}
+{-# LINE 710 "src/ehc/Base/Common.chs" #-}
 withLkupLiftCyc1 :: (t -> Maybe UID) -> (t -> UIDS) -> (UID -> Maybe t) -> (UIDS -> t -> x) -> (t -> x) -> UIDS -> t -> x
 withLkupLiftCyc1 get noVisit lookup yes no vsVisited t
   = maybe dflt (withLkupLiftCyc2 get noVisit lookup dflt yes no vsVisited) $ get t
@@ -530,7 +544,7 @@
 withLkupLift get
   = withLkupChkVisitLift get (const Set.empty)
 
-{-# LINE 705 "src/ehc/Base/Common.chs" #-}
+{-# LINE 725 "src/ehc/Base/Common.chs" #-}
 lookupLiftCyc1 :: (x -> Maybe UID) -> (UID -> Maybe x) -> x' -> (x->x') -> x -> x'
 lookupLiftCyc1 get lookup dflt found x
   = lk Set.empty dflt found x
@@ -540,17 +554,17 @@
 lookupLiftCyc2 get lookup dflt found x
   = maybe dflt (\x -> lookupLiftCyc1 get lookup (found x) found x) $ lookup x
 
-{-# LINE 716 "src/ehc/Base/Common.chs" #-}
+{-# LINE 736 "src/ehc/Base/Common.chs" #-}
 lookupLiftCycMb1 :: (x -> Maybe UID) -> (UID -> Maybe x) -> x -> Maybe x
 lookupLiftCycMb1 get lookup x = lookupLiftCyc1 get lookup Nothing Just x
 
 lookupLiftCycMb2 :: (x -> Maybe UID) -> (UID -> Maybe x) -> UID -> Maybe x
 lookupLiftCycMb2 get lookup x = lookupLiftCyc2 get lookup Nothing Just x
 
-{-# LINE 728 "src/ehc/Base/Common.chs" #-}
+{-# LINE 748 "src/ehc/Base/Common.chs" #-}
 data Presence = Present | Absent deriving (Eq,Ord,Show)
 
-{-# LINE 736 "src/ehc/Base/Common.chs" #-}
+{-# LINE 756 "src/ehc/Base/Common.chs" #-}
 -- | Combine [[x1..xn],..,[y1..ym]] to [[x1..y1],[x2..y1],..,[xn..ym]].
 --   Each element [xi..yi] is distinct based on the the key k in xi==(k,_)
 combineToDistinguishedElts :: Eq k => [AssocL k v] -> [AssocL k v]
@@ -565,7 +579,7 @@
                                      ls
                       ) l
 
-{-# LINE 759 "src/ehc/Base/Common.chs" #-}
+{-# LINE 779 "src/ehc/Base/Common.chs" #-}
 data AlwaysEq a = AlwaysEq a
 
 instance Eq (AlwaysEq a) where
@@ -580,12 +594,12 @@
 instance PP a => PP (AlwaysEq a) where
   pp (AlwaysEq x) = pp x
 
-{-# LINE 779 "src/ehc/Base/Common.chs" #-}
+{-# LINE 799 "src/ehc/Base/Common.chs" #-}
 type PkgName = String
 
 emptyPkgName = ""
 
-{-# LINE 789 "src/ehc/Base/Common.chs" #-}
+{-# LINE 809 "src/ehc/Base/Common.chs" #-}
 -- | How to do linking/packaging
 data LinkingStyle
   = LinkingStyle_None			-- ^ no linking (e.g. indicated by --compile-only flag)
@@ -594,40 +608,40 @@
   deriving (Eq,Ord,Enum,Bounded)
 
 
-{-# LINE 829 "src/ehc/Base/Common.chs" #-}
+{-# LINE 849 "src/ehc/Base/Common.chs" #-}
 metaLevTy, metaLevKi, metaLevSo :: MetaLev
 metaLevTy  = metaLevVal + 1
 metaLevKi  = metaLevTy  + 1
 metaLevSo  = metaLevKi  + 1
 
-{-# LINE 840 "src/ehc/Base/Common.chs" #-}
+{-# LINE 860 "src/ehc/Base/Common.chs" #-}
 -- | Use as variable id
 type VarId    = UID
 type VarIdS   = Set.Set UID
 
-{-# LINE 850 "src/ehc/Base/Common.chs" #-}
+{-# LINE 870 "src/ehc/Base/Common.chs" #-}
 uidHNm :: UID -> HsName
 uidHNm = mkHNm -- hsnFromString . show
 
-{-# LINE 855 "src/ehc/Base/Common.chs" #-}
+{-# LINE 875 "src/ehc/Base/Common.chs" #-}
 uidQualHNm :: HsName -> UID -> HsName
 uidQualHNm modnm uid =
                         hsnPrefixQual modnm $
                         uidHNm uid
 
 
-{-# LINE 873 "src/ehc/Base/Common.chs" #-}
+{-# LINE 893 "src/ehc/Base/Common.chs" #-}
 data SrcConst
   = SrcConst_Int    Integer
   | SrcConst_Char   Char
   | SrcConst_Ratio  Integer Integer
   deriving (Eq,Show,Ord)
 
-{-# LINE 885 "src/ehc/Base/Common.chs" #-}
+{-# LINE 905 "src/ehc/Base/Common.chs" #-}
 fmap2Tuple :: Functor f => snd -> f x -> f (x,snd)
 fmap2Tuple snd = fmap (\x -> (x,snd))
 
-{-# LINE 894 "src/ehc/Base/Common.chs" #-}
+{-# LINE 914 "src/ehc/Base/Common.chs" #-}
 -- | Variation of `when` where Boolean condition is computed in a monad
 whenM :: Monad m => m Bool -> m () -> m ()
 whenM c m = do
@@ -642,7 +656,7 @@
   unless c' m
 {-# INLINE unlessM #-}
 
-{-# LINE 914 "src/ehc/Base/Common.chs" #-}
+{-# LINE 934 "src/ehc/Base/Common.chs" #-}
 genNmMap :: Ord x => (String->s) -> [x] -> Map.Map x s -> (Map.Map x s, [s])
 genNmMap mk xs m
   = (m',reverse ns)
@@ -657,7 +671,7 @@
         ch x | x < 26    = [chr $ ord 'a' + x]
              | otherwise = let (q,r) = x `quotRem` 26 in ch q ++ ch r
 
-{-# LINE 934 "src/ehc/Base/Common.chs" #-}
+{-# LINE 954 "src/ehc/Base/Common.chs" #-}
 data MaybeOk a
   = JustOk  a
   | NotOk   String
@@ -679,7 +693,7 @@
 maybeOk _ j (JustOk x) = j x
 maybeOk n _ (NotOk  x) = n x
 
-{-# LINE 961 "src/ehc/Base/Common.chs" #-}
+{-# LINE 981 "src/ehc/Base/Common.chs" #-}
 -- | Abstract graph visit, over arbitrary structures
 graphVisit
   :: (Ord node)
@@ -699,7 +713,7 @@
                                      unvisited3          = unionUnvisited (newUnvisited `Set.difference` visited') unvisited2
                                  in  v ((visited',unvisited3),thr')
 
-{-# LINE 986 "src/ehc/Base/Common.chs" #-}
+{-# LINE 1006 "src/ehc/Base/Common.chs" #-}
 data KnownPrim
   =
     -- platform Int
@@ -738,17 +752,17 @@
   | KnownPrim_Mul64
   deriving (Show,Eq,Enum,Bounded)
 
-{-# LINE 1032 "src/ehc/Base/Common.chs" #-}
+{-# LINE 1052 "src/ehc/Base/Common.chs" #-}
 instance PP KnownPrim where
   pp = pp . show
 
-{-# LINE 1037 "src/ehc/Base/Common.chs" #-}
+{-# LINE 1057 "src/ehc/Base/Common.chs" #-}
 allKnownPrimMp :: Map.Map String KnownPrim
 allKnownPrimMp
   = Map.fromList [ (drop prefixLen $ show t, t) | t <- [ minBound .. maxBound ] ]
   where prefixLen = length "KnownPrim_"
 
-{-# LINE 1052 "src/ehc/Base/Common.chs" #-}
+{-# LINE 1072 "src/ehc/Base/Common.chs" #-}
 str2stMpWithOmit :: (Show opt, Enum opt, Bounded opt, Eq opt) => [opt] -> Map.Map String opt
 str2stMpWithOmit omits = Map.fromList [ (show o, o) | o <- [minBound .. maxBound] \\ omits ]
 
@@ -758,11 +772,11 @@
 showStr2stMp :: Map.Map String opt -> String
 showStr2stMp = concat . intersperse " " . Map.keys
 
-{-# LINE 1067 "src/ehc/Base/Common.chs" #-}
+{-# LINE 1087 "src/ehc/Base/Common.chs" #-}
 deriving instance Data KnownPrim
 deriving instance Typeable KnownPrim
 
-{-# LINE 1072 "src/ehc/Base/Common.chs" #-}
+{-# LINE 1092 "src/ehc/Base/Common.chs" #-}
 deriving instance Typeable VarUIDHsName
 deriving instance Data VarUIDHsName
 
@@ -786,7 +800,7 @@
 deriving instance Data CLbl
 
 
-{-# LINE 1101 "src/ehc/Base/Common.chs" #-}
+{-# LINE 1121 "src/ehc/Base/Common.chs" #-}
 instance Binary KnownPrim where
   put = putEnum8
   get = getEnum8
diff --git a/src/UHC/Light/Compiler/Base/FileSearchLocation.hs b/src/UHC/Light/Compiler/Base/FileSearchLocation.hs
--- a/src/UHC/Light/Compiler/Base/FileSearchLocation.hs
+++ b/src/UHC/Light/Compiler/Base/FileSearchLocation.hs
@@ -25,31 +25,37 @@
 import UHC.Light.Compiler.Base.HsName
 import UHC.Light.Compiler.Base.Target
 import qualified UHC.Light.Compiler.ConfigInstall as Cfg
+import UHC.Util.Hashable
+import GHC.Generics
 
 
 
 
-{-# LINE 38 "src/ehc/Base/FileSearchLocation.chs" #-}
+{-# LINE 44 "src/ehc/Base/FileSearchLocation.chs" #-}
 data FileLocKind
   = FileLocKind_Dir									-- plain directory
   | FileLocKind_Pkg	PkgKey							-- specific package
   					String							-- with the dir inside package it was found
   | FileLocKind_PkgDb								-- yet unknown package in the package database
-  deriving Eq
+  deriving (Eq,Ord,Generic)
 
+instance Hashable FileLocKind
+
 instance Show FileLocKind where
   show  FileLocKind_Dir		    = "directory"
   show (FileLocKind_Pkg p d)	= "package: " ++ showPkgKey p ++ "(in: " ++ d ++ ")"
   show  FileLocKind_PkgDb    	= "package database"
 
-{-# LINE 66 "src/ehc/Base/FileSearchLocation.chs" #-}
+{-# LINE 74 "src/ehc/Base/FileSearchLocation.chs" #-}
 data FileLoc
   = FileLoc
       {	filelocKind		:: FileLocKind
       , filelocDir		:: String
       }
-  deriving Eq
+  deriving (Eq,Ord,Generic)
 
+instance Hashable FileLoc
+
 instance Show FileLoc where
   show (FileLoc k d) = d ++ " (" ++ show k ++ ")"
 
@@ -59,28 +65,28 @@
 fileLocPkgDb :: FileLoc
 fileLocPkgDb = FileLoc FileLocKind_PkgDb ""
 
-{-# LINE 84 "src/ehc/Base/FileSearchLocation.chs" #-}
+{-# LINE 94 "src/ehc/Base/FileSearchLocation.chs" #-}
 mkDirFileLoc
   = FileLoc FileLocKind_Dir
 
-{-# LINE 93 "src/ehc/Base/FileSearchLocation.chs" #-}
+{-# LINE 103 "src/ehc/Base/FileSearchLocation.chs" #-}
 mkPkgFileLoc :: PkgKey -> String -> FileLoc
 mkPkgFileLoc p d = FileLoc (FileLocKind_Pkg p d) d
 
-{-# LINE 98 "src/ehc/Base/FileSearchLocation.chs" #-}
+{-# LINE 108 "src/ehc/Base/FileSearchLocation.chs" #-}
 filelocIsPkg :: FileLoc -> Bool
 filelocIsPkg (FileLoc (FileLocKind_Pkg _ _) _) = True
 filelocIsPkg (FileLoc  FileLocKind_PkgDb    _) = True
 filelocIsPkg _                                 = False
 
-{-# LINE 105 "src/ehc/Base/FileSearchLocation.chs" #-}
+{-# LINE 115 "src/ehc/Base/FileSearchLocation.chs" #-}
 type StringPath  = [String]
 type FileLocPath = [FileLoc]
 
-{-# LINE 114 "src/ehc/Base/FileSearchLocation.chs" #-}
+{-# LINE 124 "src/ehc/Base/FileSearchLocation.chs" #-}
 type FileSearchLoc = FileLoc
 
-{-# LINE 122 "src/ehc/Base/FileSearchLocation.chs" #-}
+{-# LINE 132 "src/ehc/Base/FileSearchLocation.chs" #-}
 type PkgKey1 = PkgName
 type PkgKey2 = Maybe Version
 type PkgKey  = (PkgKey1,PkgKey2)
@@ -89,11 +95,11 @@
   mkHNm (n,Just v) =   mkHNmBase (n ++ "-" ++ (concat $ intersperse "." $ map show $ versionBranch v))
   mkHNm (n,_     ) =   mkHNm      n
 
-{-# LINE 136 "src/ehc/Base/FileSearchLocation.chs" #-}
+{-# LINE 146 "src/ehc/Base/FileSearchLocation.chs" #-}
 showPkgKey :: PkgKey -> String
 showPkgKey = show . mkHNm
 
-{-# LINE 145 "src/ehc/Base/FileSearchLocation.chs" #-}
+{-# LINE 155 "src/ehc/Base/FileSearchLocation.chs" #-}
 -- | Description of hiding/exposing pkgs, determining the used packages for looking up modules.
 data PackageSearchFilter
   -- Note: the below order is important, it is used for sorting just before having its effect on searchable packages.
@@ -103,13 +109,13 @@
   | PackageSearchFilter_ExposePkg		[PkgKey]
   deriving (Show, Eq, Ord)
 
-{-# LINE 156 "src/ehc/Base/FileSearchLocation.chs" #-}
+{-# LINE 166 "src/ehc/Base/FileSearchLocation.chs" #-}
 pkgSearchFilter :: (x -> Maybe PkgKey) -> ([PkgKey] -> PackageSearchFilter) -> [x] -> [PackageSearchFilter]
 pkgSearchFilter mkKey mk ss
   = if null ps then [] else [mk ps]
   where ps = catMaybes $ map mkKey ss
 
-{-# LINE 167 "src/ehc/Base/FileSearchLocation.chs" #-}
+{-# LINE 177 "src/ehc/Base/FileSearchLocation.chs" #-}
 type PackageCfgKeyVals = Map.Map String String
 
 -- | Per package info
@@ -146,7 +152,7 @@
 emptyPackageDatabase :: PackageDatabase
 emptyPackageDatabase = PackageDatabase emptyPackageMp Map.empty
 
-{-# LINE 209 "src/ehc/Base/FileSearchLocation.chs" #-}
+{-# LINE 219 "src/ehc/Base/FileSearchLocation.chs" #-}
 
 mkInternalPkgFileBase :: PkgKey -> String {- compiler name/version -} -> Target -> TargetFlavor -> FilePath
 mkInternalPkgFileBase pkgKey compversion tgt tgtv =
diff --git a/src/UHC/Light/Compiler/Base/HsName.hs b/src/UHC/Light/Compiler/Base/HsName.hs
--- a/src/UHC/Light/Compiler/Base/HsName.hs
+++ b/src/UHC/Light/Compiler/Base/HsName.hs
@@ -46,8 +46,12 @@
 import UHC.Util.Utils
 import UHC.Util.Pretty
 import Data.List
+import Data.Typeable (Typeable)
+import Data.Generics (Data)
+import GHC.Generics
 import UHC.Light.Compiler.Base.UID
 import UU.Scanner.Position
+import UHC.Util.Hashable
 import qualified Data.Set as Set
 import Data.Maybe
 import qualified Data.Map as Map
@@ -60,7 +64,6 @@
 import Control.Monad
 import UHC.Util.Binary
 import UHC.Util.Serialize
-import Data.Hashable
 
 
 
@@ -70,7 +73,7 @@
 
 
 
-{-# LINE 57 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 63 "src/ehc/Base/HsName.chs" #-}
 -- | A HsNameUniqifier represents the 'type' of unification
 data HsNameUniqifier
   = HsNameUniqifier_Blank               -- just a new identifier, with an empty show
@@ -98,8 +101,10 @@
   | HsNameUniqifier_FFE                 -- name of value to be ff exported
   | HsNameUniqifier_FFECoerced          -- name of possibly coerced value to be ff exported
   | HsNameUniqifier_CoreAPI             -- Used by the Core API, to allow external programs to generate new identifiers.
-  deriving (Eq,Ord,Enum)
+  deriving (Eq,Ord,Enum,Generic)
 
+instance Hashable HsNameUniqifier
+
 -- | The show of a HsNameUniqifier is found back in the pretty printed code, current convention is 3 uppercase letters, as a balance between size and clarity of meaning
 instance Show HsNameUniqifier where
   show HsNameUniqifier_Blank                = ""
@@ -128,15 +133,17 @@
   show HsNameUniqifier_FFECoerced           = "FFC"
   show HsNameUniqifier_CoreAPI              = "CRA"
 
-{-# LINE 146 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 154 "src/ehc/Base/HsName.chs" #-}
 -- | A HsNameUnique represents the optional additional info to make the uniqification even more unique
 data HsNameUnique
   = HsNameUnique_None
   | HsNameUnique_String     !String
   | HsNameUnique_Int        !Int
   | HsNameUnique_UID        !UID
-  deriving (Eq,Ord)
+  deriving (Eq,Ord,Generic)
 
+instance Hashable HsNameUnique
+
 showHsNameUnique :: (UID -> String) -> (String -> String) -> HsNameUnique -> String
 showHsNameUnique _    _    (HsNameUnique_None    ) = ""
 showHsNameUnique _    shws (HsNameUnique_String s) = shws s
@@ -146,7 +153,7 @@
 instance Show HsNameUnique where
   show = showHsNameUnique hsnShowUID id
 
-{-# LINE 165 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 175 "src/ehc/Base/HsName.chs" #-}
 type HsNameUniqifierMp = Map.Map HsNameUniqifier [HsNameUnique]
 
 emptyHsNameUniqifierMp :: HsNameUniqifierMp
@@ -166,14 +173,14 @@
 showHsNameUniqifierMp :: String -> HsNameUniqifierMp -> [String]
 showHsNameUniqifierMp = showHsNameUniqifierMp' True
 
-{-# LINE 200 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 210 "src/ehc/Base/HsName.chs" #-}
 uniqifierMpAdd :: HsNameUniqifier -> HsNameUnique -> HsNameUniqifierMp -> HsNameUniqifierMp
 uniqifierMpAdd ufier u m = Map.unionWith (++) (Map.singleton ufier [u]) m
 
 uniqifierMpUnion :: HsNameUniqifierMp -> HsNameUniqifierMp -> HsNameUniqifierMp
 uniqifierMpUnion = Map.unionWith (++)
 
-{-# LINE 212 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 222 "src/ehc/Base/HsName.chs" #-}
 hsnUniqify' :: HsNameUniqifier -> HsNameUnique -> HsName -> HsName
 hsnUniqify' ufier u
   = mk
@@ -200,7 +207,7 @@
 hsnUniqifyEval :: HsName -> HsName
 hsnUniqifyEval = hsnUniqify HsNameUniqifier_Evaluated
 
-{-# LINE 240 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 250 "src/ehc/Base/HsName.chs" #-}
 -- | Remove uniqification, if present
 hsnStripUniqify :: HsName -> Maybe HsName
 hsnStripUniqify n@(HsName_Modf {hsnUniqifiers=us})
@@ -208,7 +215,7 @@
   | otherwise     = Just $ n {hsnUniqifiers = Map.empty}
 hsnStripUniqify _ = Nothing
 
-{-# LINE 249 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 259 "src/ehc/Base/HsName.chs" #-}
 -- | Simplify name into list of simplifications of increasing complexity, all strictly simpler than the one given. [] therefore means no simplifications exist
 hsnSimplifications :: HsName -> [HsName]
 hsnSimplifications n@(HsName_Modf {}) = case hsnStripUniqify n of
@@ -218,7 +225,7 @@
 -- hsnSimplifications n@(HsName_Base {}          ) = [] -- [n]
 hsnSimplifications _                            = []
 
-{-# LINE 264 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 274 "src/ehc/Base/HsName.chs" #-}
 hsnHashWithSalt :: Int -> HsName -> Int
 hsnHashWithSalt salt (HsName_Base s      ) = hashWithSalt salt s
 hsnHashWithSalt salt (HsName_UID  i      ) = hashWithSalt salt i
@@ -230,6 +237,7 @@
   hashWithSalt salt n@(HsName_Modf h _ _ _) | h /= 0 = h
   hashWithSalt salt n                                = hsnHashWithSalt salt n
 
+{- 20150221: done via generics
 instance Hashable OrigName where
   hashWithSalt salt (OrigNone    ) = salt
   hashWithSalt salt (OrigLocal  n) = 23 `hashWithSalt` hashWithSalt salt n
@@ -244,15 +252,16 @@
 
 instance Hashable HsNameUniqifier where
   hashWithSalt salt u = hashWithSalt salt (fromEnum u)
+-}
 
-{-# LINE 292 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 308 "src/ehc/Base/HsName.chs" #-}
 -- | Fixate hash
 hsnFixateHash :: HsName -> HsName
 hsnFixateHash n@(HsName_Modf _ _ _ _) = n {hsnHash = hsnHashWithSalt 17 n}
 hsnFixateHash n                       = n
 {-# INLINE hsnFixateHash #-}
 
-{-# LINE 306 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 322 "src/ehc/Base/HsName.chs" #-}
 -- | Haskell name representation, exports of constructors only intented for internal use
 data HsName
   =   HsName_Base
@@ -271,13 +280,15 @@
         }
   |   HsName_Pos                    !Int
   |   HsName_Nr                     !Int !OrigName
-  deriving (Eq,Ord)
+  deriving (Eq,Ord,Generic)
 
-{-# LINE 332 "src/ehc/Base/HsName.chs" #-}
+-- instance Hashable HsName
+
+{-# LINE 350 "src/ehc/Base/HsName.chs" #-}
 hsnEmpty :: HsName
 hsnEmpty = mkHNm ""
 
-{-# LINE 346 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 364 "src/ehc/Base/HsName.chs" #-}
 -- | Is HsName a HsName_Pos?
 hsnMbPos :: HsName -> Maybe Int
 hsnMbPos (HsName_Pos p) = Just p
@@ -287,7 +298,7 @@
 hsnIsPos = isJust . hsnMbPos
 {-# INLINE hsnIsPos #-}
 
-{-# LINE 357 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 375 "src/ehc/Base/HsName.chs" #-}
 -- | Is HsName a HsName_Pos?
 hsnMbNr :: HsName -> Maybe (Int,OrigName)
 hsnMbNr (HsName_Nr i o) = Just (i,o)
@@ -297,32 +308,32 @@
 hsnIsNr = isJust . hsnMbNr
 {-# INLINE hsnIsNr #-}
 
-{-# LINE 368 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 386 "src/ehc/Base/HsName.chs" #-}
 -- | Smart constructor for HsName_Modf
 hsnMkModf :: [String] -> HsName -> HsNameUniqifierMp -> HsName
 -- hsnMkModf q b u = hsnFixateHash $ HsName_Modf 0 q b u
 hsnMkModf q b u = hsnFixateHash $ either (\(_,n) -> n {hsnQualifiers = q, hsnUniqifiers = hsnUniqifiers n `uniqifierMpUnion` u}) (\b -> HsName_Modf 0 q b u) $ hsnCanonicSplit b
 {-# INLINE hsnMkModf #-}
 
-{-# LINE 380 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 398 "src/ehc/Base/HsName.chs" #-}
 -- | Smart constructor for HsName_Nr
 hsnMkNr :: Int -> OrigName -> HsName
 hsnMkNr = HsName_Nr
 {-# INLINE hsnMkNr #-}
 
-{-# LINE 395 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 413 "src/ehc/Base/HsName.chs" #-}
 -- | Just lift a string to the base HsName variant
 mkHNmBase :: String -> HsName
 mkHNmBase s = hsnMkModf [] (HsName_Base s) Map.empty
 
-{-# LINE 405 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 423 "src/ehc/Base/HsName.chs" #-}
 -- | Eliminate alternative internal representations
 hsnEnsureIsBase :: HsName -> HsName
 hsnEnsureIsBase n@(HsName_UID _) = mkHNm $ show n
 hsnEnsureIsBase   (HsName_Pos i) = mkHNm $ show i
 hsnEnsureIsBase n                = n
 
-{-# LINE 415 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 433 "src/ehc/Base/HsName.chs" #-}
 -- | unpack a HsName into qualifiers + base string + repack function
 hsnBaseUnpack' :: HsName -> Maybe ([String],String,[String] -> String -> HsName)
 hsnBaseUnpack' (HsName_Base s    ) = Just ([],s,\_ s -> HsName_Base s)
@@ -335,7 +346,7 @@
 hsnBaseUnpack (HsName_Modf _ q b u) = fmap (\(bs,mk) -> (bs, \s -> hsnMkModf q (mk s) u)) (hsnBaseUnpack b)
 hsnBaseUnpack _                     = Nothing
 
-{-# LINE 433 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 451 "src/ehc/Base/HsName.chs" #-}
 -- | If name is a HsName_Base after some unpacking, return the base string, without qualifiers, without uniqifiers
 hsnMbBaseString :: HsName -> Maybe String
 hsnMbBaseString = fmap fst . hsnBaseUnpack
@@ -350,35 +361,37 @@
 hsnBaseString = maybe "??" id . hsnMbBaseString
 
 
-{-# LINE 449 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 467 "src/ehc/Base/HsName.chs" #-}
 -- | Just lift a int to the int HsName variant
 mkHNmPos :: Int -> HsName
 mkHNmPos s = hsnMkModf [] (HsName_Pos s) Map.empty
 
-{-# LINE 459 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 477 "src/ehc/Base/HsName.chs" #-}
 -- | Compare, ignoring hash
 cmpHsNameOnNm :: HsName -> HsName -> Ordering
 cmpHsNameOnNm (HsName_Modf _ q1 b1 u1) (HsName_Modf _ q2 b2 u2) = compare (HsName_Modf 0 q1 b1 u1)  (HsName_Modf 0 q2 b2 u2)
 cmpHsNameOnNm n1                       n2                       = compare n1                        n2
 
-{-# LINE 474 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 492 "src/ehc/Base/HsName.chs" #-}
 hsnFromString :: String -> HsName
 hsnFromString = mkHNmBase
 {-# INLINE hsnFromString #-}
 
-{-# LINE 485 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 503 "src/ehc/Base/HsName.chs" #-}
 data OrigName
   = OrigNone
   | OrigLocal  HsName
   | OrigGlobal HsName
   | OrigFunc   HsName
-  deriving (Eq,Ord)
+  deriving (Eq,Ord,Generic)
 
-{-# LINE 494 "src/ehc/Base/HsName.chs" #-}
+instance Hashable OrigName
+
+{-# LINE 514 "src/ehc/Base/HsName.chs" #-}
 instance PP HsName where
   pp h = pp (show h)
 
-{-# LINE 500 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 520 "src/ehc/Base/HsName.chs" #-}
 -- | Parameterizable show of HsName when used from within the Show instance for HsName, or for a parseable representation used by (e.g.) Core pretty printing
 hsnShow' :: (UID -> String) -> (String -> String) -> (String -> String) -> String -> String -> HsName -> String
 hsnShow' shwu shws brk qsep usep n
@@ -400,25 +413,25 @@
 
 hsnShowUID i = 'u' : show i
 
-{-# LINE 525 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 545 "src/ehc/Base/HsName.chs" #-}
 instance Show HsName where
   show = hsnShow "." "_@"
 
-{-# LINE 535 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 555 "src/ehc/Base/HsName.chs" #-}
 -- | A HsName is either a complex/aggregrate name or a base case
 hsnCanonicSplit :: HsName -> Either ([String],HsName) HsName
 hsnCanonicSplit n@(HsName_Modf _ qs _ _) = Left $ (qs, hsnFixateHash (n {hsnQualifiers = []}))
 hsnCanonicSplit n                        = Right n
 
-{-# LINE 544 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 564 "src/ehc/Base/HsName.chs" #-}
 hsnToList :: HsName -> [HsName]
 hsnToList n = either (\(qs,b) -> map mkHNmBase qs ++ [b]) (:[]) (hsnCanonicSplit n)
 
-{-# LINE 549 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 569 "src/ehc/Base/HsName.chs" #-}
 hsnInitLast :: HsName -> ([HsName],HsName)
 hsnInitLast n = either (\(qs,b) -> (map mkHNmBase qs, b)) (\x -> ([],x)) (hsnCanonicSplit n)
 
-{-# LINE 554 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 574 "src/ehc/Base/HsName.chs" #-}
 hsnPrefix                           ::  String -> HsName -> HsName
 hsnPrefix   p   hsn
   = maybe (mkHNmBase $ p ++ show hsn) (\(s,mk) -> mk $ p ++ s) $ hsnBaseUnpack hsn
@@ -430,12 +443,12 @@
 mkHNmPrefix :: HSNM x => String -> x -> HsName
 mkHNmPrefix p = hsnPrefix p . mkHNm
 
-{-# LINE 567 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 587 "src/ehc/Base/HsName.chs" #-}
 stringAlphanumeric :: String -> String
 stringAlphanumeric s
   = concat (map (charAlphanumeric) s)
 
-{-# LINE 580 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 600 "src/ehc/Base/HsName.chs" #-}
 charAlphanumeric :: Char -> String
 charAlphanumeric '\'' = "prime"
 charAlphanumeric ':' = "colon"
@@ -465,7 +478,7 @@
 charAlphanumeric ')' = "close"
 charAlphanumeric  c  = [c]
 
-{-# LINE 613 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 633 "src/ehc/Base/HsName.chs" #-}
 dontStartWithDigit :: String -> String
 dontStartWithDigit xs@(a:_) | isDigit a || a=='_' = "y"++xs
                             | otherwise           = xs
@@ -485,7 +498,7 @@
 hsnShowAlphanumeric (HsName_Modf _ q b u)         = concat $ intersperse "_" $ q ++ [hsnShowAlphanumeric b] ++ map stringAlphanumeric (showHsNameUniqifierMp "_" u)
 -- hsnShowAlphanumeric n                           = concat $ intersperse "_" $ map hsnShowAlphanumeric $ hsnToList n
 
-{-# LINE 637 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 657 "src/ehc/Base/HsName.chs" #-}
 hsnToFPath :: HsName -> FPath
 hsnToFPath n
   = mkFPathFromDirsFile qs b
@@ -494,16 +507,16 @@
 instance FPATH HsName where
   mkFPath = hsnToFPath
 
-{-# LINE 648 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 668 "src/ehc/Base/HsName.chs" #-}
 hsnConcat                           ::  HsName -> HsName -> HsName
 hsnConcat       h1    h2            =   hsnFromString (show h1 ++ show h2)
 
-{-# LINE 657 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 677 "src/ehc/Base/HsName.chs" #-}
 -- compare for row labels, lexicographic ordering (currently)
 rowLabCmp :: HsName -> HsName -> Ordering
 rowLabCmp = cmpHsNameOnNm
 
-{-# LINE 667 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 687 "src/ehc/Base/HsName.chs" #-}
 -- qualifier (i.e. module name) and qualified part of name
 hsnSplitQualify :: HsName -> (Maybe HsName,HsName)
 hsnSplitQualify n
@@ -529,7 +542,7 @@
       (Just q ,n) -> hsnPrefixQual q (f n)
 -}
 
-{-# LINE 694 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 714 "src/ehc/Base/HsName.chs" #-}
 -- qualifier (i.e. module name) of name
 hsnQualifier :: HsName -> Maybe HsName
 hsnQualifier = fst . hsnSplitQualify
@@ -542,7 +555,7 @@
 hsnIsQual :: HsName -> Bool
 hsnIsQual = isJust . hsnQualifier
 
-{-# LINE 720 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 740 "src/ehc/Base/HsName.chs" #-}
 hsnMapQual :: (HsName -> HsName) -> HsName -> HsName
 hsnMapQual f qn
   = case hsnSplitQualify qn of
@@ -553,7 +566,7 @@
 hsnSetLevQual 0 m n = hsnSetQual m n
 hsnSetLevQual _ _ n = n
 
-{-# LINE 736 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 756 "src/ehc/Base/HsName.chs" #-}
 hsnFixUniqifiers' :: Bool -> String -> HsName -> HsName
 hsnFixUniqifiers' showlen sep (HsName_Modf _ qs n us) = hsnMkModf qs (hsnSuffix n (concat $ showHsNameUniqifierMp' showlen sep us)) Map.empty
 hsnFixUniqifiers' _       _   n                       = n
@@ -564,19 +577,19 @@
 hsnJavalikeFixUniqifiers :: HsName -> HsName
 hsnJavalikeFixUniqifiers = hsnFixUniqifiers' False ""
 
-{-# LINE 752 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 772 "src/ehc/Base/HsName.chs" #-}
 hsnStripUniqifiers :: HsName -> HsName
 hsnStripUniqifiers (HsName_Modf _ qs n us) = hsnMkModf qs n emptyHsNameUniqifierMp
 hsnStripUniqifiers n                       = n
 
-{-# LINE 762 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 782 "src/ehc/Base/HsName.chs" #-}
 hsnQualUniqify :: HsName -> HsName -> HsName
 hsnQualUniqify modNm n
   = if hsnIsQual n
     then n
     else hsnSetQual modNm n
 
-{-# LINE 774 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 794 "src/ehc/Base/HsName.chs" #-}
 class HSNM a where
   mkHNm :: a -> HsName
 
@@ -587,17 +600,17 @@
   mkHNm = mkHNm . show
 
 
-{-# LINE 786 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 806 "src/ehc/Base/HsName.chs" #-}
 instance HSNM UID where
   mkHNm = HsName_UID
   -- mkHNm x = hsnFromString ('_' : show x)
 
-{-# LINE 797 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 817 "src/ehc/Base/HsName.chs" #-}
 instance HSNM String where
   mkHNm s
     = mkHNm $ map hsnFromString $ splitForQualified s
 
-{-# LINE 803 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 823 "src/ehc/Base/HsName.chs" #-}
 instance HSNM ([HsName],HsName) where
   mkHNm (l,n) = mkHNm (l ++ [n])
 
@@ -610,32 +623,34 @@
                                 n                       -> hsnMkModf qs n Map.empty
                            where qs = catMaybes $ map hsnMbBaseString i
 
-{-# LINE 826 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 846 "src/ehc/Base/HsName.chs" #-}
 instance Position HsName where
   line   _ = (-1)
   column _ = (-1)
   file   _ = ""
 
-{-# LINE 837 "src/ehc/Base/HsName.chs" #-}
-deriving instance Typeable HsNameUniqifier
-deriving instance Data HsNameUniqifier
-
-deriving instance Typeable HsNameUnique
-deriving instance Data HsNameUnique
-
+{-# LINE 857 "src/ehc/Base/HsName.chs" #-}
 deriving instance Typeable HsName
 deriving instance Data HsName
 
-deriving instance Typeable OrigName
-deriving instance Data OrigName
-
 deriving instance Typeable IdOccKind
 deriving instance Data IdOccKind
 
 deriving instance Typeable IdOcc
 deriving instance Data IdOcc
 
-{-# LINE 861 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 868 "src/ehc/Base/HsName.chs" #-}
+deriving instance Typeable HsNameUniqifier
+deriving instance Data HsNameUniqifier
+
+deriving instance Typeable HsNameUnique
+deriving instance Data HsNameUnique
+
+{-# LINE 876 "src/ehc/Base/HsName.chs" #-}
+deriving instance Typeable OrigName
+deriving instance Data OrigName
+
+{-# LINE 885 "src/ehc/Base/HsName.chs" #-}
 instance Binary HsNameUniqifier where
   put = putEnum8
   get = getEnum8
@@ -702,7 +717,7 @@
   sputNested = sputPlain
   sgetNested = sgetPlain
 
-{-# LINE 933 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 957 "src/ehc/Base/HsName.chs" #-}
 data IdOccKind
   = IdOcc_Val
   | IdOcc_Pat
@@ -717,7 +732,7 @@
   | IdOcc_Fusion
   deriving (Eq,Ord,Enum)
 
-{-# LINE 959 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 983 "src/ehc/Base/HsName.chs" #-}
 -- intended for parsing
 instance Show IdOccKind where
   show IdOcc_Val      = "Value"
@@ -732,21 +747,21 @@
   show IdOcc_Data     = "Data"
   show IdOcc_Fusion   = "Fusion"
 
-{-# LINE 985 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 1009 "src/ehc/Base/HsName.chs" #-}
 -- intended for parsing
 instance PP IdOccKind where
   pp = text . show
 
-{-# LINE 991 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 1015 "src/ehc/Base/HsName.chs" #-}
 data IdOcc
   = IdOcc { ioccNm :: !HsName, ioccKind :: !IdOccKind }
   deriving (Show,Eq,Ord)
 
 
-{-# LINE 1002 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 1026 "src/ehc/Base/HsName.chs" #-}
 type HsNameS = Set.Set HsName
 
-{-# LINE 1010 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 1034 "src/ehc/Base/HsName.chs" #-}
 -- ensure a name valid for backends which are more restrictive in their allowed identifier character set
 hsnSafeJavaLike :: HsName -> HsName
 hsnSafeJavaLike
@@ -757,17 +772,17 @@
         first s@(c:_) | isDigit c = '_' : s
         first s                   =       s
 
-{-# LINE 1037 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 1061 "src/ehc/Base/HsName.chs" #-}
 type FvS = HsNameS
 type FvSMp = Map.Map HsName FvS
 
-{-# LINE 1046 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 1070 "src/ehc/Base/HsName.chs" #-}
 type HsNameMp = Map.Map HsName HsName
 
 hsnRepl :: HsNameMp -> HsName -> HsName
 hsnRepl m n = Map.findWithDefault n n m
 
-{-# LINE 1057 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 1081 "src/ehc/Base/HsName.chs" #-}
 data RPatNm
   = RPatNmOrig {rpatNmNm :: !HsName}
   | RPatNmUniq {rpatNmNm :: !HsName}
@@ -783,16 +798,16 @@
   pp (RPatNmOrig n) = n >|< "(O)"
   pp (RPatNmUniq n) = n >|< "(U)"
 
-{-# LINE 1074 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 1098 "src/ehc/Base/HsName.chs" #-}
 rpatNmIsOrig :: RPatNm -> Bool
 rpatNmIsOrig (RPatNmOrig _) = True
 rpatNmIsOrig _              = False
 
-{-# LINE 1084 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 1108 "src/ehc/Base/HsName.chs" #-}
 hsnUnknown ::  HsName
 hsnUnknown =   hsnFromString "??"
 
-{-# LINE 1093 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 1117 "src/ehc/Base/HsName.chs" #-}
 
 data Track
   = TrackNone
@@ -803,7 +818,7 @@
   deriving (Eq, Ord, Show)
 
 
-{-# LINE 1105 "src/ehc/Base/HsName.chs" #-}
+{-# LINE 1129 "src/ehc/Base/HsName.chs" #-}
 
 instance Serialize Track where
   sput (TrackNone             ) = sputWord8 0
diff --git a/src/UHC/Light/Compiler/Base/ParseUtils.hs b/src/UHC/Light/Compiler/Base/ParseUtils.hs
--- a/src/UHC/Light/Compiler/Base/ParseUtils.hs
+++ b/src/UHC/Light/Compiler/Base/ParseUtils.hs
@@ -1,9 +1,14 @@
 module UHC.Light.Compiler.Base.ParseUtils
 ( P
-, parseString )
+, parseString
+, EHParseOpts (..), defaultEHParseOpts
+, EHPrs, EHPrsAna, EHPrsOff
+, EHParser
+, parseWithFPath )
 where
 import UHC.Light.Compiler.Base.Common
 import UU.Parsing
+import UU.Parsing.Offside
 import UHC.Util.ParseUtils
 import UHC.Util.ScanUtils
 import UHC.Light.Compiler.Scanner.Common
@@ -13,13 +18,94 @@
 import Data.Maybe
 import Data.Version
 import Data.List
+import Control.Monad
+import Control.Monad.IO.Class
+import System.IO
+import UHC.Util.Pretty
+import UHC.Util.FPath
+import UHC.Light.Compiler.Error
+import UHC.Light.Compiler.Error.Pretty
 
-{-# LINE 34 "src/ehc/Base/ParseUtils.chs" #-}
+{-# LINE 40 "src/ehc/Base/ParseUtils.chs" #-}
 type P p = PlainParser Token p
 
-{-# LINE 42 "src/ehc/Base/ParseUtils.chs" #-}
+{-# LINE 48 "src/ehc/Base/ParseUtils.chs" #-}
 parseString :: ScanOpts -> P res -> String -> Maybe res
 parseString scanOpts p s
   = if null errs then Just res else Nothing
   where tokens     = scan scanOpts (initPos s) s
         (res,errs) = parseToResMsgs p tokens
+
+{-# LINE 60 "src/ehc/Base/ParseUtils.chs" #-}
+-- | Options to influence parsing
+data EHParseOpts
+  = EHParseOpts
+      { ehpoptsLitMode		:: Bool			-- ^ literal mode?
+      , ehpoptsStopAtErr	:: Bool			-- ^ stop prematurely when parse error occurs?
+      , ehpoptsForImport	:: Bool			-- ^ for import only?
+      }
+    deriving (Show)
+
+defaultEHParseOpts :: EHParseOpts
+defaultEHParseOpts
+  = EHParseOpts
+      { ehpoptsLitMode		= False
+      , ehpoptsStopAtErr	= False
+      , ehpoptsForImport	= False
+      }
+
+{-# LINE 83 "src/ehc/Base/ParseUtils.chs" #-}
+type EHPrs prs inp sym pos a = prs inp Pair sym pos a
+type EHPrsAna a = EHPrs AnaParser [Token] Token (Maybe Token) a
+type EHPrsOff a = EHPrs OffsideParser [Token] Token (Maybe Token) a
+
+{-# LINE 89 "src/ehc/Base/ParseUtils.chs" #-}
+class ( Eq symmsg, Show symmsg, Show pos, Position pos, PP (Message symmsg pos)
+      -- , IsParser (prs inp Pair sym pos) sym
+      -- , InputState inp sym pos
+      -- , IsParser prs sym
+      )
+      => EHParser prs inp sym symmsg pos | prs -> inp sym symmsg pos where
+  -- | Scan & parse using a parser coupled with a scanner
+  ehScanParseToResMsgs :: ScanOpts -> EHParseOpts -> EHPrs prs inp sym pos a -> FilePath -> Handle -> IO (a,[Message symmsg pos])
+  -- ehScanParseToResMsgs :: ScanOpts -> EHParseOpts -> prs a -> FilePath -> Handle -> IO (a,[Message symmsg pos])
+
+-- instance (Show sym, Eq sym, Show pos, Position pos, Symbol sym, InputState [Token] sym pos) => EHParser AnaParser [Token] sym sym pos where
+-- instance (Show sym, Ord sym, Show pos, Position pos, Symbol sym, InputState [Token] sym pos) => EHParser AnaParser [Token] sym sym pos where
+instance EHParser AnaParser [Token] Token Token (Maybe Token) where
+-- instance (Show sym, Ord sym, Show pos, Position pos, Symbol sym, InputState [Token] sym pos) => EHParser (AnaParser [Token] Pair sym pos) [Token] sym sym pos where
+-- instance (Show pos, Position pos, InputState [Token] Token pos) => EHParser AnaParser [Token] Token Token pos where
+-- instance InputState [Token] Token Pos => EHParser AnaParser [Token] Token Token Pos where
+  ehScanParseToResMsgs sopts popts prs fn fh = do
+    tokens <- scanHandle sopts fn fh
+    return $ parseToResMsgs prs tokens
+
+instance EHParser OffsideParser [Token] Token (OffsideSymbol Token) (Maybe Token) where
+-- instance EHParser (OffsideParser [Token] Pair Token (Maybe Token)) [Token] Token (OffsideSymbol Token) (Maybe Token) where
+  ehScanParseToResMsgs sopts popts prs fn fh = do
+    tokens <- offsideScanHandle sopts fn fh
+    return $ if ehpoptsStopAtErr popts
+      then parseOffsideToResMsgsStopAtErr prs tokens
+      else parseOffsideToResMsgs prs tokens
+
+{-# LINE 123 "src/ehc/Base/ParseUtils.chs" #-}
+-- | The one and only parsing wrapper for parsing from files
+parseWithFPath
+  :: ( MonadIO m, Monad m
+     , EHParser prs inp sym symmsg pos
+     )
+     => ScanOpts
+     -> EHParseOpts
+     -> EHPrs prs inp sym pos a
+     -- -> prs a
+     -> FPath															-- ^ file
+     -> m (a,[Err])
+parseWithFPath sopts popts p fp = do
+    (fn,fh) <- liftIO $ openFPath fp ReadMode False
+    let sopts' | ehpoptsLitMode popts = sopts {scoLitmode = True}
+               | otherwise            = sopts
+    (res,msgs) <- liftIO $ ehScanParseToResMsgs sopts' popts p fn fh
+    let errs = map (rngLift emptyRange mkPPErr) msgs
+    liftIO $ res `seq` hClose fh
+    return (res,errs)
+
diff --git a/src/UHC/Light/Compiler/Base/Parser.hs b/src/UHC/Light/Compiler/Base/Parser.hs
--- a/src/UHC/Light/Compiler/Base/Parser.hs
+++ b/src/UHC/Light/Compiler/Base/Parser.hs
@@ -6,8 +6,6 @@
 , parseHsName
 , pStr
 , pUIDHI
-, pPredOccId
-, pIdOcc, pIdOccKind
 , pAssocL
 , pCurlySemiBlock, pCurlys, pSemiBlock, pCurlyCommaBlock )
 where
@@ -68,28 +66,6 @@
 {-# LINE 72 "src/ehc/Base/Parser.chs" #-}
 pBool :: P Bool
 pBool = True <$ pKeyTk "True" <|> False <$ pKeyTk "False"
-
-{-# LINE 78 "src/ehc/Base/Parser.chs" #-}
-pPredOccId :: P PredOccId
-pPredOccId
-  = mkPrId <$> pUIDHI
-
-{-# LINE 84 "src/ehc/Base/Parser.chs" #-}
--- counterpart of PP IdOccKind instance
-pIdOccKind :: P IdOccKind
-pIdOccKind
-  =   IdOcc_Val     <$ pKeyTk "Value"
-  <|> IdOcc_Pat     <$ pKeyTk "Pat"
-  <|> IdOcc_Type    <$ pKeyTk "Type"
-  <|> IdOcc_Kind    <$ pKeyTk "Kind"
-  <|> IdOcc_Class   <$ pKeyTk "Class"
-  <|> IdOcc_Inst    <$ pKeyTk "Instance"
-  <|> IdOcc_Dflt    <$ pKeyTk "Default"
-  <|> IdOcc_Data    <$ pKeyTk "Data"
-  <|> IdOcc_Any     <$ pKeyTk "Any"
-
-pIdOcc :: P IdOcc
-pIdOcc = IdOcc <$ pOCURLY <*> pDollNm <* pCOMMA <*> pIdOccKind <* pCCURLY
 
 {-# LINE 102 "src/ehc/Base/Parser.chs" #-}
 pAssocL :: P a -> P b -> P (AssocL a b)
diff --git a/src/UHC/Light/Compiler/Base/Parser2.hs b/src/UHC/Light/Compiler/Base/Parser2.hs
--- a/src/UHC/Light/Compiler/Base/Parser2.hs
+++ b/src/UHC/Light/Compiler/Base/Parser2.hs
@@ -1,6 +1,5 @@
 module UHC.Light.Compiler.Base.Parser2
-( pModEntRel
-, parsePkgKey, parsePkgKeys )
+( parsePkgKey, parsePkgKeys )
 where
 import UHC.Light.Compiler.Base.HsName.Builtin
 import UHC.Light.Compiler.Base.Common
@@ -34,16 +33,4 @@
 
 parsePkgKeys :: String -> Maybe [PkgKey]
 parsePkgKeys = parseString scanOptsPkgKey (pList pPkgKey)
-
-{-# LINE 63 "src/ehc/Base/Parser2.chs" #-}
-pModEnt :: P ModEnt
-pModEnt
-  = (\kind occ owns -> ModEnt kind occ owns emptyRange)
-    <$  pOCURLY <*> pIdOccKind <* pCOMMA <*> pIdOcc
-    <*> pMaybe Set.empty id (Set.fromList <$ pCOMMA <* pOCURLY <*> pListSep pCOMMA pModEnt <* pCCURLY)
-    <*  pCCURLY
-
-pModEntRel :: P ModEntRel
-pModEntRel
-  = Rel.fromList <$> pAssocL pDollNm pModEnt
 
diff --git a/src/UHC/Light/Compiler/Base/TreeTrie.hs b/src/UHC/Light/Compiler/Base/TreeTrie.hs
--- a/src/UHC/Light/Compiler/Base/TreeTrie.hs
+++ b/src/UHC/Light/Compiler/Base/TreeTrie.hs
@@ -29,14 +29,16 @@
 import UHC.Util.Utils
 import UHC.Util.Pretty hiding (empty)
 import qualified UHC.Util.Pretty as PP
-import UHC.Light.Compiler.Base.Debug
-import Data.Typeable
+import Data.Typeable (Typeable)
 import Data.Generics (Data)
+import UHC.Light.Compiler.Base.Debug
 import Control.Monad
 import UHC.Util.Serialize
 
 
 
+
+
 {-# LINE 64 "src/ehc/Base/TreeTrie.chs" #-}
 -- | Both key and trie can allow partial matching, indicated by TreeTrie1Key
 data TreeTrie1Key k
@@ -96,7 +98,7 @@
 ppTreeTrieKey :: PP k => TreeTrieKey k -> PP_Doc
 ppTreeTrieKey = ppBracketsCommas . map ppTreeTrieMpKey
 
-{-# LINE 142 "src/ehc/Base/TreeTrie.chs" #-}
+{-# LINE 137 "src/ehc/Base/TreeTrie.chs" #-}
 -- | Make singleton, which should at end be stripped from bottom layer of empty TTM1K []
 ttkSingleton :: TreeTrie1Key k -> TreeTrieKey k
 ttkSingleton k = [TTM1K [k]] : ttkEmpty
@@ -131,14 +133,14 @@
                    | otherwise                          = kk : ttkFixate kks
 ttkFixate _                                             = []
 
-{-# LINE 182 "src/ehc/Base/TreeTrie.chs" #-}
+{-# LINE 177 "src/ehc/Base/TreeTrie.chs" #-}
 -- | Split key into parent and children components, inverse of ttkAdd'
 ttkParentChildren :: TreeTrieKey k -> ( TreeTrie1Key k, [TreeTrieMpKey k] )
 ttkParentChildren k
   = case k of
       ([TTM1K [h]] : t) -> (h,t)
 
-{-# LINE 194 "src/ehc/Base/TreeTrie.chs" #-}
+{-# LINE 189 "src/ehc/Base/TreeTrie.chs" #-}
 -- | Match 1st arg with wildcards to second, returning the to be propagated key to next layer in tree
 matchTreeTrieMpKeyTo :: Eq k => TreeTrieMpKey k -> TreeTrieMpKey k -> Maybe (TreeTrieMpKey k -> TreeTrieMpKey k)
 matchTreeTrieMpKeyTo l r
@@ -155,19 +157,19 @@
         m1 (TT1K_One l) (TT1K_One r) | l == r = Just [\x -> [x]]
         m1  _            _                    = Nothing
 
-{-# LINE 216 "src/ehc/Base/TreeTrie.chs" #-}
+{-# LINE 211 "src/ehc/Base/TreeTrie.chs" #-}
 -- | Keyable values, i.e. capable of yielding a TreeTrieKey for retrieval from a trie
 class TreeTrieKeyable x k where
   toTreeTrieKey :: x -> TreeTrieKey k
 
-{-# LINE 226 "src/ehc/Base/TreeTrie.chs" #-}
+{-# LINE 221 "src/ehc/Base/TreeTrie.chs" #-}
 data TreeTrieLookup
   = TTL_Exact                           -- lookup with exact match
   | TTL_WildInTrie                      -- lookup with wildcard matching in trie
   | TTL_WildInKey                       -- lookup with wildcard matching in key
   deriving (Eq)
 
-{-# LINE 238 "src/ehc/Base/TreeTrie.chs" #-}
+{-# LINE 233 "src/ehc/Base/TreeTrie.chs" #-}
 -- | Child structure
 type TreeTrieChildren k v
   = Map.Map (TreeTrieMpKey k) (TreeTrie k v)
@@ -185,14 +187,14 @@
 
 empty = emptyTreeTrie
 
-{-# LINE 270 "src/ehc/Base/TreeTrie.chs" #-}
+{-# LINE 265 "src/ehc/Base/TreeTrie.chs" #-}
 instance (Show k, Show v) => Show (TreeTrie k v) where
   showsPrec _ t = showList $ toListByKey t
 
 instance (PP k, PP v) => PP (TreeTrie k v) where
   pp t = ppBracketsCommasBlock $ map (\(a,b) -> ppTreeTrieKey a >#< ":" >#< b) $ toListByKey t
 
-{-# LINE 284 "src/ehc/Base/TreeTrie.chs" #-}
+{-# LINE 279 "src/ehc/Base/TreeTrie.chs" #-}
 toFastSeqSubs :: TreeTrieChildren k v -> Seq.FastSeq (TreeTrieKey k,v)
 toFastSeqSubs ttries
   = Seq.unions
@@ -213,7 +215,7 @@
 
 toList = toListByKey
 
-{-# LINE 306 "src/ehc/Base/TreeTrie.chs" #-}
+{-# LINE 301 "src/ehc/Base/TreeTrie.chs" #-}
 fromListByKeyWith :: Ord k => (v -> v -> v) -> [(TreeTrieKey k,v)] -> TreeTrie k v
 fromListByKeyWith cmb = unionsWith cmb . map (uncurry singleton)
 
@@ -226,7 +228,7 @@
 fromList :: Ord k => [(TreeTrieKey k,v)] -> TreeTrie k v
 fromList = fromListByKey
 
-{-# LINE 326 "src/ehc/Base/TreeTrie.chs" #-}
+{-# LINE 321 "src/ehc/Base/TreeTrie.chs" #-}
 lookupPartialByKey' :: forall k v v' . (PP k,Ord k) => (TreeTrieKey k -> v -> v') -> TreeTrieLookup -> TreeTrieKey k -> TreeTrie k v -> ([v'],Maybe v')
 lookupPartialByKey' mkRes ttrieLookup keys ttrie
   = l id mkRes keys ttrie
@@ -300,11 +302,11 @@
 
 lookup = lookupByKey
 
-{-# LINE 401 "src/ehc/Base/TreeTrie.chs" #-}
+{-# LINE 396 "src/ehc/Base/TreeTrie.chs" #-}
 lookupResultToList :: ([v],Maybe v) -> [v]
 lookupResultToList (vs,mv) = maybeToList mv ++ vs
 
-{-# LINE 410 "src/ehc/Base/TreeTrie.chs" #-}
+{-# LINE 405 "src/ehc/Base/TreeTrie.chs" #-}
 isEmpty :: TreeTrie k v -> Bool
 isEmpty ttrie
   =  isNothing (ttrieMbVal ttrie)
@@ -313,11 +315,11 @@
 null :: TreeTrie k v -> Bool
 null = isEmpty
 
-{-# LINE 420 "src/ehc/Base/TreeTrie.chs" #-}
+{-# LINE 415 "src/ehc/Base/TreeTrie.chs" #-}
 elems :: TreeTrie k v -> [v]
 elems = map snd . toListByKey
 
-{-# LINE 429 "src/ehc/Base/TreeTrie.chs" #-}
+{-# LINE 424 "src/ehc/Base/TreeTrie.chs" #-}
 singleton :: Ord k => TreeTrieKey k -> v -> TreeTrie k v
 singleton keys val
   = s keys
@@ -327,7 +329,7 @@
 singletonKeyable :: (Ord k,TreeTrieKeyable v k) => v -> TreeTrie k v
 singletonKeyable val = singleton (toTreeTrieKey val) val
 
-{-# LINE 444 "src/ehc/Base/TreeTrie.chs" #-}
+{-# LINE 439 "src/ehc/Base/TreeTrie.chs" #-}
 unionWith :: Ord k => (v -> v -> v) -> TreeTrie k v -> TreeTrie k v -> TreeTrie k v
 unionWith cmb t1 t2
   = TreeTrie
@@ -348,7 +350,7 @@
 unions :: Ord k => [TreeTrie k v] -> TreeTrie k v
 unions = unionsWith const
 
-{-# LINE 466 "src/ehc/Base/TreeTrie.chs" #-}
+{-# LINE 461 "src/ehc/Base/TreeTrie.chs" #-}
 insertByKeyWith :: Ord k => (v -> v -> v) -> TreeTrieKey k -> v -> TreeTrie k v -> TreeTrie k v
 insertByKeyWith cmb keys val ttrie = unionsWith cmb [singleton keys val,ttrie]
 
@@ -361,7 +363,7 @@
 insertKeyable :: (Ord k,TreeTrieKeyable v k) => v -> TreeTrie k v -> TreeTrie k v
 insertKeyable val = insertByKey (toTreeTrieKey val) val
 
-{-# LINE 484 "src/ehc/Base/TreeTrie.chs" #-}
+{-# LINE 479 "src/ehc/Base/TreeTrie.chs" #-}
 deleteByKey, delete :: Ord k => TreeTrieKey k -> TreeTrie k v -> TreeTrie k v
 deleteByKey keys ttrie
   = d keys ttrie
@@ -375,11 +377,11 @@
 
 delete = deleteByKey
 
-{-# LINE 499 "src/ehc/Base/TreeTrie.chs" #-}
+{-# LINE 494 "src/ehc/Base/TreeTrie.chs" #-}
 deleteListByKey :: Ord k => [TreeTrieKey k] -> TreeTrie k v -> TreeTrie k v
 deleteListByKey keys ttrie = foldl (\t k -> deleteByKey k t) ttrie keys
 
-{-# LINE 508 "src/ehc/Base/TreeTrie.chs" #-}
+{-# LINE 503 "src/ehc/Base/TreeTrie.chs" #-}
 instance Serialize k => Serialize (TreeTrie1Key k) where
   sput (TT1K_Any            ) = sputWord8 0
   sput (TT1K_One   a        ) = sputWord8 1 >> sput a
diff --git a/src/UHC/Light/Compiler/Base/UID.hs b/src/UHC/Light/Compiler/Base/UID.hs
--- a/src/UHC/Light/Compiler/Base/UID.hs
+++ b/src/UHC/Light/Compiler/Base/UID.hs
@@ -13,20 +13,23 @@
 , uidSimplifications )
 where
 import UHC.Util.Pretty
+import UHC.Util.Hashable
 import qualified Data.Set as Set
 import Data.List
 import Control.Monad.State
 import Control.Monad.Identity
+import Data.Typeable (Typeable)
+import Data.Generics (Data)
+import GHC.Generics
 import Control.Monad
 import UHC.Util.Binary as B
 import UHC.Util.Serialize
-import Data.Hashable
 
 
 
 
 
-{-# LINE 37 "src/ehc/Base/UID.chs" #-}
+{-# LINE 41 "src/ehc/Base/UID.chs" #-}
 type FreshUidT m   = StateT UID m
 type FreshUid      = FreshUidT Identity
 
@@ -47,7 +50,7 @@
 evalFreshUid f u = fst $ runIdentity $ runFreshUidT f u
 {-# INLINE evalFreshUid #-}
 
-{-# LINE 59 "src/ehc/Base/UID.chs" #-}
+{-# LINE 63 "src/ehc/Base/UID.chs" #-}
 class Monad m => MonadFreshUID m where
   -- | Fresh single UID
   freshUID :: m UID
@@ -65,51 +68,51 @@
   freshInfUID = state $ \x -> (uidChild x, uidNext x)
   {-# INLINE freshInfUID #-}
 
-{-# LINE 83 "src/ehc/Base/UID.chs" #-}
+{-# LINE 87 "src/ehc/Base/UID.chs" #-}
 data UID = UID { uidHash :: !Int, uidInts :: ![Int] }
-  deriving (Eq,Ord)
+  deriving (Eq,Ord,Generic)
 
-{-# LINE 92 "src/ehc/Base/UID.chs" #-}
+{-# LINE 96 "src/ehc/Base/UID.chs" #-}
 mkUID :: [Int] -> UID
 mkUID is = UID (hash is) is
 
-{-# LINE 101 "src/ehc/Base/UID.chs" #-}
+{-# LINE 105 "src/ehc/Base/UID.chs" #-}
 type UIDL = [UID]
 
-{-# LINE 105 "src/ehc/Base/UID.chs" #-}
+{-# LINE 109 "src/ehc/Base/UID.chs" #-}
 type UIDS = Set.Set UID
 
-{-# LINE 109 "src/ehc/Base/UID.chs" #-}
+{-# LINE 113 "src/ehc/Base/UID.chs" #-}
 instance Show UID where
   show uid = concat . intersperse "_" . map show . reverse $ uidInts uid
 
-{-# LINE 114 "src/ehc/Base/UID.chs" #-}
+{-# LINE 118 "src/ehc/Base/UID.chs" #-}
 instance Hashable UID where
   hashWithSalt salt (UID h _) = salt `hashWithSalt` h
 
-{-# LINE 119 "src/ehc/Base/UID.chs" #-}
+{-# LINE 127 "src/ehc/Base/UID.chs" #-}
 uidNext :: UID -> UID
 uidNext (UID _ (n:ns)) = mkUID (n+1:ns)
 
 uidChild :: UID -> UID
 uidChild (UID _ ns) = mkUID (0:ns)
 
-{-# LINE 135 "src/ehc/Base/UID.chs" #-}
+{-# LINE 143 "src/ehc/Base/UID.chs" #-}
 mkNewLevUID :: UID -> (UID,UID)
 mkNewLevUID u = (uidNext u, uidChild u)
 
-{-# LINE 140 "src/ehc/Base/UID.chs" #-}
+{-# LINE 148 "src/ehc/Base/UID.chs" #-}
 uidFromInt :: Int -> UID
 uidFromInt i = mkUID [i]
 
-{-# LINE 145 "src/ehc/Base/UID.chs" #-}
+{-# LINE 153 "src/ehc/Base/UID.chs" #-}
 uidStart :: UID
 uidStart = uidFromInt 0
 
 uidUnused :: UID
 uidUnused = uidFromInt (-1)
 
-{-# LINE 153 "src/ehc/Base/UID.chs" #-}
+{-# LINE 161 "src/ehc/Base/UID.chs" #-}
 mkNewLevUID2 u = let { (u',u1)          = mkNewLevUID   u; (u'',u2)          = mkNewLevUID   u'} in (u'',u1,u2)
 mkNewLevUID3 u = let { (u',u1,u2)       = mkNewLevUID2  u; (u'',u3)          = mkNewLevUID   u'} in (u'',u1,u2,u3)
 mkNewLevUID4 u = let { (u',u1,u2)       = mkNewLevUID2  u; (u'',u3,u4)       = mkNewLevUID2  u'} in (u'',u1,u2,u3,u4)
@@ -142,7 +145,7 @@
 instance PP UID where
   pp = text . show
 
-{-# LINE 187 "src/ehc/Base/UID.chs" #-}
+{-# LINE 195 "src/ehc/Base/UID.chs" #-}
 -- | Inverse of pUID
 showUIDParseable :: UID -> String
 -- showUIDParseable uid = "%[" ++ (concat $ intersperse "/" $ map show $ uidInts uid) ++ "]"
@@ -152,26 +155,26 @@
 ppUIDParseable :: UID -> PP_Doc
 ppUIDParseable = pp . showUIDParseable
 
-{-# LINE 198 "src/ehc/Base/UID.chs" #-}
+{-# LINE 206 "src/ehc/Base/UID.chs" #-}
 mkInfNewLevUIDL :: UID -> [UID]
 mkInfNewLevUIDL = mkInfNewUIDL' mkNewLevUID
 
 mkNewLevUIDL :: Int -> UID -> [UID]
 mkNewLevUIDL = mkNewUIDL' mkNewLevUID
 
-{-# LINE 210 "src/ehc/Base/UID.chs" #-}
+{-# LINE 218 "src/ehc/Base/UID.chs" #-}
 -- | Simplifications obtained by omitting all but 1 of the Int's, then re-adding one by one, omitting the original
 uidSimplifications :: UID -> [UID]
 uidSimplifications = map (mkUID . reverse) . drop 1 . init . inits . reverse . uidInts
 
-{-# LINE 220 "src/ehc/Base/UID.chs" #-}
+{-# LINE 228 "src/ehc/Base/UID.chs" #-}
 nextUnique = mkNewLevUID
 
-{-# LINE 228 "src/ehc/Base/UID.chs" #-}
+{-# LINE 236 "src/ehc/Base/UID.chs" #-}
 deriving instance Typeable UID
 deriving instance Data UID
 
-{-# LINE 246 "src/ehc/Base/UID.chs" #-}
+{-# LINE 254 "src/ehc/Base/UID.chs" #-}
 instance Binary UID where
   put (UID a b) = B.put a >> B.put b
   get = liftM2 UID B.get B.get
diff --git a/src/UHC/Light/Compiler/CHR/Constraint.hs b/src/UHC/Light/Compiler/CHR/Constraint.hs
--- a/src/UHC/Light/Compiler/CHR/Constraint.hs
+++ b/src/UHC/Light/Compiler/CHR/Constraint.hs
@@ -27,14 +27,12 @@
 import Control.Monad
 import UHC.Util.Binary
 import UHC.Util.Serialize
-import Data.Typeable
-import Data.Generics (Data)
 import UHC.Light.Compiler.Opts.Base
 
 
 
 
-{-# LINE 37 "src/ehc/CHR/Constraint.chs" #-}
+{-# LINE 35 "src/ehc/CHR/Constraint.chs" #-}
 -- | A Constraint is abstracted over the exact predicate, but differentiates on the role: to prove, can be assumed, and side effect of reduction
 data Constraint p info
   = Prove           { cnstrPred :: !p }             -- proof obligation
@@ -47,13 +45,13 @@
                     }
   deriving (Eq, Ord, Show)
 
-{-# LINE 53 "src/ehc/CHR/Constraint.chs" #-}
+{-# LINE 51 "src/ehc/CHR/Constraint.chs" #-}
 mkReduction :: p -> info -> [p] -> Constraint p info
 mkReduction p i ps
   = Reduction p i ps
               varlookupEmpty
 
-{-# LINE 62 "src/ehc/CHR/Constraint.chs" #-}
+{-# LINE 60 "src/ehc/CHR/Constraint.chs" #-}
 #if __GLASGOW_HASKELL__ >= 708
 deriving instance Typeable  Constraint
 #else
@@ -61,14 +59,14 @@
 #endif
 deriving instance (Data x, Data y) => Data (Constraint x y)
 
-{-# LINE 71 "src/ehc/CHR/Constraint.chs" #-}
+{-# LINE 69 "src/ehc/CHR/Constraint.chs" #-}
 -- | Dissection of Constraint, including reconstruction function
 cnstrReducablePart :: Constraint p info -> Maybe (String,p,p->Constraint p info)
 cnstrReducablePart (Prove  p) = Just ("Prf",p,Prove)
 cnstrReducablePart (Assume p) = Just ("Ass",p,Assume)
 cnstrReducablePart _          = Nothing
 
-{-# LINE 84 "src/ehc/CHR/Constraint.chs" #-}
+{-# LINE 82 "src/ehc/CHR/Constraint.chs" #-}
 instance (CHRMatchable env p s) => CHRMatchable env (Constraint p info) s where
   chrMatchTo env s c1 c2
     = do { (_,p1,_) <- cnstrReducablePart c1
@@ -76,7 +74,7 @@
          ; chrMatchTo env s p1 p2
          }
 
-{-# LINE 93 "src/ehc/CHR/Constraint.chs" #-}
+{-# LINE 91 "src/ehc/CHR/Constraint.chs" #-}
 instance TTKeyable p => TTKeyable (Constraint p info) where
   toTTKey' o c -- = maybe [] (\(s,p,_) -> ttkAdd (TT1K_One $ Key_Str s) [toTTKey' o p]) $ cnstrReducablePart c
     = case cnstrReducablePart c of
@@ -84,7 +82,7 @@
                      where (_,cs) = toTTKeyParentChildren' o p
         _            -> panic "TTKeyable (Constraint p info).toTTKey'" -- ttkEmpty
 
-{-# LINE 102 "src/ehc/CHR/Constraint.chs" #-}
+{-# LINE 100 "src/ehc/CHR/Constraint.chs" #-}
 instance (VarExtractable p v,VarExtractable info v) => VarExtractable (Constraint p info) v where
   varFreeSet c
     = case cnstrReducablePart c of
@@ -97,7 +95,7 @@
   varUpd s      r@(Reduction {cnstrPred=p, cnstrInfo=i, cnstrFromPreds=ps})
                                      = r {cnstrPred=varUpd s p, cnstrInfo=varUpd s i, cnstrFromPreds=map (varUpd s) ps}
 
-{-# LINE 120 "src/ehc/CHR/Constraint.chs" #-}
+{-# LINE 118 "src/ehc/CHR/Constraint.chs" #-}
 -- | The trace of an unresolved predicate
 data UnresolvedTrace p info
   = UnresolvedTrace_None									-- no trace required when all is resolved
@@ -127,11 +125,11 @@
   		   UnresolvedTrace_Fail 	p   us  -> p >|< ": FAIL" >-< indent 2 (vlist $ map pp us)
   		   UnresolvedTrace_Overlap 	p uss 	-> p >|< ": OVERLAP" >-< indent 2 (vlist $ map (\(i,u) -> i >-< indent 2 (vlist $ map pp u)) uss)
 
-{-# LINE 155 "src/ehc/CHR/Constraint.chs" #-}
+{-# LINE 153 "src/ehc/CHR/Constraint.chs" #-}
 -- | Map from constraint to something
 type ConstraintMp' p info x = Map.Map (Constraint p info) [x]
 
-{-# LINE 160 "src/ehc/CHR/Constraint.chs" #-}
+{-# LINE 158 "src/ehc/CHR/Constraint.chs" #-}
 cnstrMpSingletonL :: Constraint p i -> [x] -> ConstraintMp' p i x
 cnstrMpSingletonL c xs = Map.singleton c xs
 
@@ -144,11 +142,11 @@
 cnstrMpMap :: (Ord p, Ord i) => (x -> y) -> ConstraintMp' p i x -> ConstraintMp' p i y
 cnstrMpMap f = Map.map (map f)
 
-{-# LINE 174 "src/ehc/CHR/Constraint.chs" #-}
+{-# LINE 172 "src/ehc/CHR/Constraint.chs" #-}
 -- | Map from constraint to info + trace
 type ConstraintToInfoTraceMp p info = ConstraintMp' p info (info,[UnresolvedTrace p info])
 
-{-# LINE 179 "src/ehc/CHR/Constraint.chs" #-}
+{-# LINE 177 "src/ehc/CHR/Constraint.chs" #-}
 cnstrTraceMpFromList :: (Ord p, Ord i) => [(Constraint p i,(i,[UnresolvedTrace p i]))] -> ConstraintToInfoTraceMp p i
 cnstrTraceMpFromList = cnstrMpFromList
 
@@ -161,35 +159,35 @@
 cnstrTraceMpLiftTrace :: (Ord p, Ord i) => ConstraintToInfoMap p i -> ConstraintToInfoTraceMp p i
 cnstrTraceMpLiftTrace = cnstrMpMap (\x -> (x,[]))
 
-{-# LINE 193 "src/ehc/CHR/Constraint.chs" #-}
+{-# LINE 191 "src/ehc/CHR/Constraint.chs" #-}
 -- | Map from constraint to info
 type ConstraintToInfoMap     p info = ConstraintMp' p info info
 
-{-# LINE 198 "src/ehc/CHR/Constraint.chs" #-}
+{-# LINE 196 "src/ehc/CHR/Constraint.chs" #-}
 emptyCnstrMp :: ConstraintMp' p info x
 emptyCnstrMp = Map.empty
 
-{-# LINE 208 "src/ehc/CHR/Constraint.chs" #-}
+{-# LINE 206 "src/ehc/CHR/Constraint.chs" #-}
 cnstrMpUnion :: (Ord p, Ord i) => ConstraintMp' p i x -> ConstraintMp' p i x -> ConstraintMp' p i x
 cnstrMpUnion = Map.unionWith (++)
 
 cnstrMpUnions :: (Ord p, Ord i) => [ConstraintMp' p i x] -> ConstraintMp' p i x
 cnstrMpUnions = Map.unionsWith (++)
 
-{-# LINE 220 "src/ehc/CHR/Constraint.chs" #-}
+{-# LINE 218 "src/ehc/CHR/Constraint.chs" #-}
 -- | Predicate for whether solving is required
 cnstrRequiresSolve :: Constraint p info -> Bool
 cnstrRequiresSolve (Reduction {}) = False
 cnstrRequiresSolve _              = True
 
-{-# LINE 231 "src/ehc/CHR/Constraint.chs" #-}
+{-# LINE 229 "src/ehc/CHR/Constraint.chs" #-}
 instance (PP p, PP info) => PP (Constraint p info) where
   pp (Prove     p     ) = "Prove"  >#< p
   pp (Assume    p     ) = "Assume" >#< p
   pp (Reduction {cnstrPred=p, cnstrInfo=i, cnstrFromPreds=ps})
                         = "Red"    >#< p >#< "<" >#< i >#< "<" >#< ppBracketsCommas ps
 
-{-# LINE 243 "src/ehc/CHR/Constraint.chs" #-}
+{-# LINE 241 "src/ehc/CHR/Constraint.chs" #-}
 instance (Serialize p, Serialize i) => Serialize (Constraint p i) where
   sput (Prove     a      ) = sputWord8 0 >> sput a
   sput (Assume    a      ) = sputWord8 1 >> sput a
diff --git a/src/UHC/Light/Compiler/CHR/Key.hs b/src/UHC/Light/Compiler/CHR/Key.hs
--- a/src/UHC/Light/Compiler/CHR/Key.hs
+++ b/src/UHC/Light/Compiler/CHR/Key.hs
@@ -10,15 +10,13 @@
 import UHC.Util.Utils
 import UHC.Light.Compiler.Ty
 import UHC.Light.Compiler.Ty.Pretty
-import Data.Typeable (Typeable)
-import Data.Generics (Data)
 import UHC.Util.Serialize
 import Control.Monad
 
 
 
 
-{-# LINE 35 "src/ehc/CHR/Key.chs" #-}
+{-# LINE 30 "src/ehc/CHR/Key.chs" #-}
 data Key
   = Key_HNm     !HsName         -- type constant, its name
   | Key_UID     !UID            -- type variable, its id, used with TKK_Partial
@@ -29,7 +27,7 @@
            , Typeable, Data
            )
 
-{-# LINE 59 "src/ehc/CHR/Key.chs" #-}
+{-# LINE 54 "src/ehc/CHR/Key.chs" #-}
 instance Show Key where
   show (Key_HNm  n) = "H:" ++ show n
   show (Key_UID  n) = "U:" ++ show n
@@ -37,7 +35,7 @@
   show (Key_TyQu n) = "Q:" ++ show n
   show (Key_Ty   n) = "T:" ++ show n
 
-{-# LINE 73 "src/ehc/CHR/Key.chs" #-}
+{-# LINE 68 "src/ehc/CHR/Key.chs" #-}
 instance PP Key where
   pp (Key_HNm  n) = "H:" >|< n
   pp (Key_UID  n) = "U:" >|< n
@@ -45,7 +43,7 @@
   pp (Key_TyQu n) = "Q:" >|< show n
   pp (Key_Ty   n) = "T:" >|< n
 
-{-# LINE 140 "src/ehc/CHR/Key.chs" #-}
+{-# LINE 135 "src/ehc/CHR/Key.chs" #-}
 data TTKeyableOpts
   = TTKeyableOpts
       { ttkoptsVarsAsWild       :: Bool             -- treat vars as wildcards
@@ -53,7 +51,7 @@
 
 defaultTTKeyableOpts = TTKeyableOpts True
 
-{-# LINE 149 "src/ehc/CHR/Key.chs" #-}
+{-# LINE 144 "src/ehc/CHR/Key.chs" #-}
 -- | TreeTrie key construction
 class TTKeyable x where
   toTTKey'                  :: TTKeyableOpts -> x ->  TreeTrieKey  Key                          -- option parameterized constuction
@@ -63,15 +61,15 @@
   toTTKey' o                    = uncurry ttkAdd' . toTTKeyParentChildren' o
   toTTKeyParentChildren' o      = ttkParentChildren . toTTKey' o
 
-{-# LINE 160 "src/ehc/CHR/Key.chs" #-}
+{-# LINE 155 "src/ehc/CHR/Key.chs" #-}
 toTTKey :: TTKeyable x => x -> TreeTrieKey Key
 toTTKey = toTTKey' defaultTTKeyableOpts
 
-{-# LINE 165 "src/ehc/CHR/Key.chs" #-}
+{-# LINE 160 "src/ehc/CHR/Key.chs" #-}
 instance TTKeyable x => TreeTrieKeyable x Key where
   toTreeTrieKey   = toTTKey
 
-{-# LINE 174 "src/ehc/CHR/Key.chs" #-}
+{-# LINE 169 "src/ehc/CHR/Key.chs" #-}
 instance Serialize Key where
   sput (Key_HNm  a) = sputWord8 0 >> sput a
   sput (Key_UID  a) = sputWord8 1 >> sput a
diff --git a/src/UHC/Light/Compiler/CHR/Solve.hs b/src/UHC/Light/Compiler/CHR/Solve.hs
--- a/src/UHC/Light/Compiler/CHR/Solve.hs
+++ b/src/UHC/Light/Compiler/CHR/Solve.hs
@@ -24,15 +24,12 @@
 import Data.Maybe
 import UHC.Util.Pretty as Pretty
 import UHC.Util.Utils
-import Data.Typeable
-import Data.Generics (Data)
 import UHC.Util.Serialize
 import Control.Monad
 
 
 
-
-{-# LINE 93 "src/ehc/CHR/Solve.chs" #-}
+{-# LINE 91 "src/ehc/CHR/Solve.chs" #-}
 type CHRTrie k v = TreeTrie.TreeTrie k v
 type CHRTrieKey = TreeTrie.TreeTrieKey Key
 type CHRLookupHow = TreeTrieLookup
@@ -79,11 +76,11 @@
 chrToWorkKey :: TTKeyable x => x -> CHRTrieKey
 chrToWorkKey = ttkFixate . toTTKey' (defaultTTKeyableOpts {ttkoptsVarsAsWild = False})
 
-{-# LINE 145 "src/ehc/CHR/Solve.chs" #-}
+{-# LINE 143 "src/ehc/CHR/Solve.chs" #-}
 type CHRKey = CHRTrieKey
 type UsedByKey = (CHRKey,Int)
 
-{-# LINE 150 "src/ehc/CHR/Solve.chs" #-}
+{-# LINE 148 "src/ehc/CHR/Solve.chs" #-}
 -- | A CHR as stored in a CHRStore, requiring additional info for efficiency
 data StoredCHR p i g s
   = StoredCHR
@@ -110,14 +107,14 @@
 emptyCHRStore :: CHRStore pred info guard subst
 emptyCHRStore = mkCHRStore emptyCHRTrie
 
-{-# LINE 182 "src/ehc/CHR/Solve.chs" #-}
+{-# LINE 180 "src/ehc/CHR/Solve.chs" #-}
 -- | Combine lists of stored CHRs by concat, adapting their identification nr to be unique
 cmbStoredCHRs :: [StoredCHR p i g s] -> [StoredCHR p i g s] -> [StoredCHR p i g s]
 cmbStoredCHRs s1 s2
   = map (\s@(StoredCHR {storedIdent=(k,nr)}) -> s {storedIdent = (k,nr+l)}) s1 ++ s2
   where l = length s2
 
-{-# LINE 190 "src/ehc/CHR/Solve.chs" #-}
+{-# LINE 188 "src/ehc/CHR/Solve.chs" #-}
 instance Show (StoredCHR p i g s) where
   show _ = "StoredCHR"
 
@@ -135,7 +132,7 @@
 instance (PP p, PP i, PP g) => PP (StoredCHR p i g s) where
   pp = ppStoredCHR
 
-{-# LINE 209 "src/ehc/CHR/Solve.chs" #-}
+{-# LINE 207 "src/ehc/CHR/Solve.chs" #-}
 -- | Convert from list to store
 chrStoreFromElems :: (TTKeyable p) => [CHR (Constraint p i) g s] -> CHRStore p i g s
 chrStoreFromElems chrs
@@ -162,7 +159,7 @@
 chrStoreUnions [s] = s
 chrStoreUnions ss  = foldr1 chrStoreUnion ss
 
-{-# LINE 237 "src/ehc/CHR/Solve.chs" #-}
+{-# LINE 235 "src/ehc/CHR/Solve.chs" #-}
 chrStoreToList :: CHRStore p i g s -> [(CHRKey,[CHR (Constraint p i) g s])]
 chrStoreToList cs
   = [ (k,chrs)
@@ -174,20 +171,20 @@
 chrStoreElems :: CHRStore p i g s -> [CHR (Constraint p i) g s]
 chrStoreElems = concatMap snd . chrStoreToList
 
-{-# LINE 250 "src/ehc/CHR/Solve.chs" #-}
+{-# LINE 248 "src/ehc/CHR/Solve.chs" #-}
 ppCHRStore :: (PP p,PP g,PP i) => CHRStore p i g s -> PP_Doc
 ppCHRStore = ppCurlysCommasBlock . map (\(k,v) -> ppCHRTrieKey k >-< indent 2 (":" >#< ppBracketsCommasBlock v)) . chrStoreToList
 
 ppCHRStore' :: (PP p,PP g,PP i) => CHRStore p i g s -> PP_Doc
 ppCHRStore' = ppCurlysCommasBlock . map (\(k,v) -> ppCHRTrieKey k >-< indent 2 (":" >#< ppBracketsCommasBlock v)) . chrTrieToListByKey . chrstoreTrie
 
-{-# LINE 267 "src/ehc/CHR/Solve.chs" #-}
+{-# LINE 265 "src/ehc/CHR/Solve.chs" #-}
 type WorkTime = Int
 
 initWorkTime :: WorkTime
 initWorkTime = 0
 
-{-# LINE 278 "src/ehc/CHR/Solve.chs" #-}
+{-# LINE 276 "src/ehc/CHR/Solve.chs" #-}
 type WorkKey = CHRKey
 type WorkUsedInMap = Map.Map (Set.Set CHRKey) (Set.Set UsedByKey)
 type WorkTrie p i = CHRTrie Key (Work p i)
@@ -215,11 +212,11 @@
 
 emptyWorkList = WorkList emptyCHRTrie Set.empty [] {- Set.empty -} [] Map.empty
 
-{-# LINE 307 "src/ehc/CHR/Solve.chs" #-}
+{-# LINE 305 "src/ehc/CHR/Solve.chs" #-}
 wlUsedInUnion :: WorkUsedInMap -> WorkUsedInMap -> WorkUsedInMap
 wlUsedInUnion = Map.unionWith Set.union
 
-{-# LINE 312 "src/ehc/CHR/Solve.chs" #-}
+{-# LINE 310 "src/ehc/CHR/Solve.chs" #-}
 instance Show (Work p i) where
   show _ = "SolveWork"
 
@@ -229,7 +226,7 @@
 ppUsedByKey :: UsedByKey -> PP_Doc
 ppUsedByKey (k,i) = ppCHRTrieKey k >|< "/" >|< i
 
-{-# LINE 323 "src/ehc/CHR/Solve.chs" #-}
+{-# LINE 321 "src/ehc/CHR/Solve.chs" #-}
 mkWorkList :: (TTKeyable p) => WorkTime -> [Constraint p i] -> WorkList p i
 mkWorkList wtm = flip (wlInsert wtm) emptyWorkList
 
@@ -256,7 +253,7 @@
 wlInsert :: (TTKeyable p) => WorkTime -> [Constraint p i] -> WorkList p i -> WorkList p i
 wlInsert wtm = wlDeleteByKeyAndInsert wtm []
 
-{-# LINE 355 "src/ehc/CHR/Solve.chs" #-}
+{-# LINE 353 "src/ehc/CHR/Solve.chs" #-}
 data SolveStep p i g s
   = SolveStep
       { stepChr     	:: CHR (Constraint p i) g s
@@ -273,7 +270,7 @@
 
 type SolveTrace p i g s = [SolveStep p i g s]
 
-{-# LINE 373 "src/ehc/CHR/Solve.chs" #-}
+{-# LINE 371 "src/ehc/CHR/Solve.chs" #-}
 instance Show (SolveStep p i g s) where
   show _ = "SolveStep"
 
@@ -282,11 +279,11 @@
   pp (SolveStats  stats           ) = "STATS"  >#< (ppAssocLV (Map.toList stats))
   pp (SolveDbg    p               ) = "DBG"  >#< p
 
-{-# LINE 383 "src/ehc/CHR/Solve.chs" #-}
+{-# LINE 381 "src/ehc/CHR/Solve.chs" #-}
 ppSolveTrace :: (PP s, PP p, PP i, PP g) => SolveTrace p i g s -> PP_Doc
 ppSolveTrace tr = ppBracketsCommasBlock [ pp st | st <- tr ]
 
-{-# LINE 392 "src/ehc/CHR/Solve.chs" #-}
+{-# LINE 390 "src/ehc/CHR/Solve.chs" #-}
 type SolveCount a b = Map.Map a (Map.Map b Int)
 
 scntUnion :: (Ord a,Ord b) => SolveCount a b -> SolveCount a b -> SolveCount a b
@@ -296,18 +293,18 @@
 scntInc a b c1
   = Map.singleton a (Map.singleton b 1) `scntUnion` c1
 
-{-# LINE 407 "src/ehc/CHR/Solve.chs" #-}
+{-# LINE 405 "src/ehc/CHR/Solve.chs" #-}
 -- type SolveMatchCache p i g s = Map.Map CHRKey [((StoredCHR p i g s,([WorkKey],[Work p i])),s)]
 type SolveMatchCache p i g s = Map.Map WorkKey [((StoredCHR p i g s,([WorkKey],[Work p i])),s)]
 
-{-# LINE 416 "src/ehc/CHR/Solve.chs" #-}
+{-# LINE 414 "src/ehc/CHR/Solve.chs" #-}
 type LastQueryW = Map.Map WorkKey WorkTime
 type LastQuery = Map.Map CHRKey LastQueryW
 
 emptyLastQuery :: LastQuery
 emptyLastQuery = Map.empty
 
-{-# LINE 424 "src/ehc/CHR/Solve.chs" #-}
+{-# LINE 422 "src/ehc/CHR/Solve.chs" #-}
 lqSingleton :: CHRKey -> Set.Set WorkKey -> WorkTime -> LastQuery
 lqSingleton ck wks wtm = Map.singleton ck $ Map.fromList [ (w,wtm) | w <- Set.toList wks ]
 
@@ -320,7 +317,7 @@
 lqLookupW :: WorkKey -> LastQueryW -> WorkTime
 lqLookupW = Map.findWithDefault initWorkTime
 
-{-# LINE 452 "src/ehc/CHR/Solve.chs" #-}
+{-# LINE 450 "src/ehc/CHR/Solve.chs" #-}
 data SolveState p i g s
   = SolveState
       { stWorkList      :: !(WorkList p i)
@@ -338,18 +335,18 @@
 emptySolveState :: SolveState p i g s
 emptySolveState = SolveState emptyWorkList Set.empty [] Map.empty Map.empty initWorkTime emptyLastQuery
 
-{-# LINE 471 "src/ehc/CHR/Solve.chs" #-}
+{-# LINE 469 "src/ehc/CHR/Solve.chs" #-}
 solveStateResetDone :: SolveState p i g s -> SolveState p i g s
 solveStateResetDone s = s {stDoneCnstrSet = Set.empty}
 
-{-# LINE 476 "src/ehc/CHR/Solve.chs" #-}
+{-# LINE 474 "src/ehc/CHR/Solve.chs" #-}
 chrSolveStateDoneConstraints :: SolveState p i g s -> [Constraint p i]
 chrSolveStateDoneConstraints = stDoneCnstrs
 
 chrSolveStateTrace :: SolveState p i g s -> SolveTrace p i g s
 chrSolveStateTrace = stTrace
 
-{-# LINE 488 "src/ehc/CHR/Solve.chs" #-}
+{-# LINE 486 "src/ehc/CHR/Solve.chs" #-}
 chrSolve
   :: ( Ord i, Ord p
      , CHRMatchable env p s, CHRCheckable env g s
@@ -384,7 +381,7 @@
   = (wlToList (stWorkList finalState), stDoneCnstrs finalState, stTrace finalState)
   where finalState = chrSolve'' env chrStore cnstrs emptySolveState
 
-{-# LINE 532 "src/ehc/CHR/Solve.chs" #-}
+{-# LINE 530 "src/ehc/CHR/Solve.chs" #-}
 chrSolve''
   :: forall env p i g s .
      ( Ord i, Ord p
@@ -502,7 +499,7 @@
                      where (wlnew,done) = splitDone cnstrs
         splitDone  = partition cnstrRequiresSolve
 
-{-# LINE 726 "src/ehc/CHR/Solve.chs" #-}
+{-# LINE 724 "src/ehc/CHR/Solve.chs" #-}
 -- | Extract candidates matching a CHRKey.
 --   Return a list of CHR matches,
 --     each match expressed as the list of constraints (in the form of Work + Key) found in the workList wlTrie, thus giving all combis with constraints as part of a CHR,
@@ -525,7 +522,7 @@
   where lkup how k = partition (\(_,w) -> workTime w < lastQueryTm) $ map (\w -> (workKey w,w)) $ TreeTrie.lookupResultToList $ chrTrieLookup how k wlTrie
                    where lastQueryTm = lqLookupW k $ lqLookupC ck lastQuery
 
-{-# LINE 757 "src/ehc/CHR/Solve.chs" #-}
+{-# LINE 755 "src/ehc/CHR/Solve.chs" #-}
 slvCombine :: Eq k => ([([Assoc k v], [Assoc k v])], t) -> [AssocL k v]
 slvCombine ([],_) = []
 slvCombine ((lh:lt),_)
@@ -536,7 +533,7 @@
                  mk ll (bef,aft) lr   = map fst ll ++ [aft] ++ map cmb lr
                                       where cmb (a,b) = a++b
 
-{-# LINE 769 "src/ehc/CHR/Solve.chs" #-}
+{-# LINE 767 "src/ehc/CHR/Solve.chs" #-}
 -- | Check whether the CHR propagation part of a match already has been used (i.e. propagated) earlier,
 --   this to avoid duplicate propagation.
 slvIsUsedByPropPart
@@ -548,7 +545,7 @@
   = fnd $ drop (storedSimpSz chr) keys
   where fnd k = maybe False (storedIdent chr `Set.member`) $ Map.lookup (Set.fromList k) wlUsedIn
 
-{-# LINE 782 "src/ehc/CHR/Solve.chs" #-}
+{-# LINE 780 "src/ehc/CHR/Solve.chs" #-}
 -- | Match the stored CHR with a set of possible constraints, giving a substitution on success
 slvMatch
   :: ( CHREmptySubstitution s
@@ -568,7 +565,7 @@
         cmb (Just s) next = fmap (|+> s) $ next s
         cmb _        _    = Nothing
 
-{-# LINE 807 "src/ehc/CHR/Solve.chs" #-}
+{-# LINE 805 "src/ehc/CHR/Solve.chs" #-}
 instance (Serialize p, Serialize i, Serialize g, Serialize s) => Serialize (CHRStore p i g s) where
   sput (CHRStore a) = sput a
   sget = liftM CHRStore sget
diff --git a/src/UHC/Light/Compiler/Config.hs b/src/UHC/Light/Compiler/Config.hs
--- a/src/UHC/Light/Compiler/Config.hs
+++ b/src/UHC/Light/Compiler/Config.hs
@@ -65,12 +65,12 @@
       , verMajor            = "1"
       , verMinor            = "1"
       , verMinorMinor       = "8"
-      , verMinorMinorMinor  = "7"
+      , verMinorMinorMinor  = "10"
       , verQuality          = "alpha"
       , verShort            = "1.1"
       , verMedium           = "1.1.8"
-      , verFull             = "1.1.8.7"
-      , verAsNumber         = "1187"
+      , verFull             = "1.1.8.10"
+      , verAsNumber         = "1010810"
       , verProg             = "ehc"
       }
 
diff --git a/src/UHC/Light/Compiler/ConfigInstall.hs b/src/UHC/Light/Compiler/ConfigInstall.hs
--- a/src/UHC/Light/Compiler/ConfigInstall.hs
+++ b/src/UHC/Light/Compiler/ConfigInstall.hs
@@ -11,7 +11,7 @@
 cppOpts  = fst $ parseCmdLineOpts Cmd_CPP "-Wno-invalid-pp-token"
 -- cppOpts  = showCmdLineOpts cppOpts'
 
-ehcSvnRevision = "master@a0c9378a77"
+ehcSvnRevision = "master@b09c90af09"
 
 ehcDefaultInplaceInstallDir = "/Volumes/Work/Programming/uhc/EHC/install"
 
diff --git a/src/UHC/Light/Compiler/ConfigInternalVersions.hs b/src/UHC/Light/Compiler/ConfigInternalVersions.hs
--- a/src/UHC/Light/Compiler/ConfigInternalVersions.hs
+++ b/src/UHC/Light/Compiler/ConfigInternalVersions.hs
@@ -26,7 +26,7 @@
 internalVersionHI = mkInternalVersion 1
 
 -- | For binary/serialized Core .cr/.bcr/.tcr etc files
-internalVersionCore = mkInternalVersion 14
+internalVersionCore = mkInternalVersion 20
 
 -- | For binary/serialized CoreRun .crr/.bcrr./tcrr etc files
 internalVersionCoreRun = mkInternalVersion 6
diff --git a/src/UHC/Light/Compiler/Core.hs b/src/UHC/Light/Compiler/Core.hs
--- a/src/UHC/Light/Compiler/Core.hs
+++ b/src/UHC/Light/Compiler/Core.hs
@@ -66,11 +66,7 @@
 import Control.Monad
 import UHC.Util.Binary
 import UHC.Util.Serialize
-import Data.Typeable (Typeable)
-import Data.Generics (Data)
 import UHC.Light.Compiler.Foreign
-
-
 
 
 
diff --git a/src/UHC/Light/Compiler/Core/Parser.hs b/src/UHC/Light/Compiler/Core/Parser.hs
--- a/src/UHC/Light/Compiler/Core/Parser.hs
+++ b/src/UHC/Light/Compiler/Core/Parser.hs
@@ -2,6 +2,7 @@
 ( pCModule, pCExpr )
 where
 import UHC.Light.Compiler.Base.Common
+import UHC.Light.Compiler.Opts.Base
 import UHC.Light.Compiler.Base.HsName.Builtin
 import UHC.Util.ScanUtils
 import UHC.Light.Compiler.Scanner.Common
@@ -17,13 +18,13 @@
 import UHC.Light.Compiler.Foreign.Parser
 
 
-{-# LINE 31 "src/ehc/Core/Parser.chs" #-}
+{-# LINE 34 "src/ehc/Core/Parser.chs" #-}
 type CParser       hp     =    PlainParser Token hp
 
 pS :: CParser String
 pS = pStr
 
-{-# LINE 38 "src/ehc/Core/Parser.chs" #-}
+{-# LINE 41 "src/ehc/Core/Parser.chs" #-}
 pINT		,
   pINTEGER  ,
   pCHAR
@@ -38,7 +39,7 @@
          <|> pINTEGER
          )
 
-{-# LINE 60 "src/ehc/Core/Parser.chs" #-}
+{-# LINE 63 "src/ehc/Core/Parser.chs" #-}
 -- | Parse something which is semicolon terminated
 pSemiTerminated :: CParser x -> CParser x
 pSemiTerminated p = p <* pSEMI
@@ -47,9 +48,9 @@
 pListSemiTerminated :: CParser x -> CParser [x]
 pListSemiTerminated p = pList (pSemiTerminated p)
 
-{-# LINE 70 "src/ehc/Core/Parser.chs" #-}
-pCModule :: CParser CModule
-pCModule
+{-# LINE 78 "src/ehc/Core/Parser.chs" #-}
+pCModule :: EHCOpts -> CParser CModule
+pCModule _
   = CModule_Mod
     <$  pMODULE <*> pDollNm <* pSEMI
     <*> pE
diff --git a/src/UHC/Light/Compiler/CoreRun.hs b/src/UHC/Light/Compiler/CoreRun.hs
--- a/src/UHC/Light/Compiler/CoreRun.hs
+++ b/src/UHC/Light/Compiler/CoreRun.hs
@@ -73,6 +73,10 @@
 
 
 
+deriving instance Typeable Mod
+
+
+
 -- | Fast access sequence
 type CRArray  x =  V.Vector   x
 type CRMArray x = MV.IOVector x
diff --git a/src/UHC/Light/Compiler/CoreRun/Parser.hs b/src/UHC/Light/Compiler/CoreRun/Parser.hs
--- a/src/UHC/Light/Compiler/CoreRun/Parser.hs
+++ b/src/UHC/Light/Compiler/CoreRun/Parser.hs
@@ -1,7 +1,9 @@
 module UHC.Light.Compiler.CoreRun.Parser
-( parseModFromString )
+( parseModFromString
+, pMod )
 where
 import UHC.Light.Compiler.Base.Common
+import UHC.Light.Compiler.Opts.Base
 import UHC.Light.Compiler.Base.HsName.Builtin
 import UHC.Util.ScanUtils
 import UHC.Light.Compiler.Scanner.Common
@@ -12,24 +14,24 @@
 import Data.Maybe
 import UHC.Light.Compiler.CoreRun
 
-{-# LINE 29 "src/ehc/CoreRun/Parser.chs" #-}
+{-# LINE 32 "src/ehc/CoreRun/Parser.chs" #-}
 -- | Parses a module. TBD: integration with other parser utils from EHC driver...
 parseModFromString :: String -> Either [String] Mod
-parseModFromString str = case parseToResMsgs pMod $ scan corerunScanOpts (initPos $ take 80 str) str of
+parseModFromString str = case parseToResMsgs (pMod emptyEHCOpts) $ scan corerunScanOpts (initPos $ take 80 str) str of
     (res, []) -> Right res
     (_, errs) -> Left $ map show errs
 
-{-# LINE 41 "src/ehc/CoreRun/Parser.chs" #-}
+{-# LINE 44 "src/ehc/CoreRun/Parser.chs" #-}
 pDifficultNm :: CRParser HsName
 pDifficultNm = (\s -> {- parseHsName [s] -} mkHNm s) <$> pStr
 
-{-# LINE 50 "src/ehc/CoreRun/Parser.chs" #-}
+{-# LINE 53 "src/ehc/CoreRun/Parser.chs" #-}
 type CRParser hp = PlainParser Token hp
 
-{-# LINE 54 "src/ehc/CoreRun/Parser.chs" #-}
+{-# LINE 62 "src/ehc/CoreRun/Parser.chs" #-}
 -- | Parse module 'Mod'
-pMod :: CRParser Mod
-pMod
+pMod :: EHCOpts -> CRParser Mod
+pMod _
   = (\nm nr sz main is ms bs -> mkModWithImportsMetas nm nr sz is ms (crarrayFromList bs) main)
     <$  pMODULE <*> pMaybe (mkHNm "Main") id pDollNm <*> pInt <* pCOMMA <*> pInt <*> pMb (pRARROW *> pExp) <* pSEMI
     <*> pList (pImport <* pSEMI)
diff --git a/src/UHC/Light/Compiler/CoreRun/Run/Val.hs b/src/UHC/Light/Compiler/CoreRun/Run/Val.hs
--- a/src/UHC/Light/Compiler/CoreRun/Run/Val.hs
+++ b/src/UHC/Light/Compiler/CoreRun/Run/Val.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE MagicHash #-}
-{-# LANGUAGE DefaultSignatures, DeriveGeneric, TypeOperators, KindSignatures #-}
+{-# LANGUAGE DefaultSignatures, TypeOperators, KindSignatures #-}
 -- {-# OPTIONS_GHC -O3 #-}
 
 module UHC.Light.Compiler.CoreRun.Run.Val
@@ -45,8 +45,6 @@
 import qualified Data.Vector as V
 import qualified Data.Vector.Mutable as MV
 import qualified Data.Vector.Generic as GV
-import Data.Data
-import Data.Typeable
 import System.IO
 import System.IO.Unsafe
 import Data.IORef
@@ -61,7 +59,7 @@
 import qualified Data.Map as Map
 import Data.Maybe
 
-{-# LINE 73 "src/ehc/CoreRun/Run/Val.chs" #-}
+{-# LINE 71 "src/ehc/CoreRun/Run/Val.chs" #-}
 -- | Runtime context: module + enclosing lambda. Note/TBD: reduces performance quite a bit...
 data RCxt
   = RCxt
@@ -72,7 +70,7 @@
 instance Show RCxt where
   show _ = "RCxt"
 
-{-# LINE 85 "src/ehc/CoreRun/Run/Val.chs" #-}
+{-# LINE 83 "src/ehc/CoreRun/Run/Val.chs" #-}
 -- | Make fresh 'RCxt' from module and enclosing frame ptr
 mkRCxt :: HpPtr -> HpPtr -> IO RCxt
 mkRCxt m f = liftM2 RCxt (newIORef m) (newIORef f)
@@ -90,7 +88,7 @@
   return $ cx {rcxtSlRef = f'}
 {-# INLINE rcxtCloneWithNewFrame #-}
 
-{-# LINE 108 "src/ehc/CoreRun/Run/Val.chs" #-}
+{-# LINE 106 "src/ehc/CoreRun/Run/Val.chs" #-}
 -- | Representation of run value
 data RVal
   =
@@ -229,7 +227,7 @@
 instance PP RVal where
   pp rval = unsafePerformIO (ppRVal rval)
 
-{-# LINE 248 "src/ehc/CoreRun/Run/Val.chs" #-}
+{-# LINE 246 "src/ehc/CoreRun/Run/Val.chs" #-}
 mkTuple :: (RunSem RValCxt RValEnv RVal m a) => [RVal] -> RValT m a
 mkTuple vs = liftIO (mvecAllocFillFromV $ crarrayFromList vs) >>= rsemNode 0 >>= rsemPush
 {-# INLINE mkTuple #-}
@@ -238,14 +236,14 @@
 mkUnit = mkTuple []
 {-# INLINE mkUnit #-}
 
-{-# LINE 258 "src/ehc/CoreRun/Run/Val.chs" #-}
+{-# LINE 256 "src/ehc/CoreRun/Run/Val.chs" #-}
 -- Vector of RVal
 type RValV = CRArray RVal
 
 -- Mutable vector of RVal
 type RValMV = CRMArray RVal
 
-{-# LINE 270 "src/ehc/CoreRun/Run/Val.chs" #-}
+{-# LINE 268 "src/ehc/CoreRun/Run/Val.chs" #-}
 -- | Environment: context/reader
 data RValCxt
   = RValCxt
@@ -262,11 +260,11 @@
               | tuparity <- [2..15], let n = "(" ++ replicate (tuparity-1) ',' ++ ")"
               ]
 
-{-# LINE 288 "src/ehc/CoreRun/Run/Val.chs" #-}
+{-# LINE 286 "src/ehc/CoreRun/Run/Val.chs" #-}
 rvalTrEnterLam :: RunSem RValCxt RValEnv RVal m x => Maybe HsName -> RValT m a -> RValT m a
 rvalTrEnterLam s = local (\r -> r {rcxtCallCxt = s : rcxtCallCxt r})
 
-{-# LINE 293 "src/ehc/CoreRun/Run/Val.chs" #-}
+{-# LINE 291 "src/ehc/CoreRun/Run/Val.chs" #-}
 -- | Set return context to True
 mustReturn :: RunSem RValCxt RValEnv RVal m x => RValT m a -> RValT m a
 mustReturn = local (\r -> r {rcxtInRet = True})
@@ -287,7 +285,7 @@
 rvalPrimargEvl x = rvalRetEvl x >>= rsemPop >>= rsemDeref
 {-# INLINE rvalPrimargEvl #-}
 
-{-# LINE 315 "src/ehc/CoreRun/Run/Val.chs" #-}
+{-# LINE 313 "src/ehc/CoreRun/Run/Val.chs" #-}
 -- | Update with datatype info
 rcxtUpdDatatypes :: RunSem RValCxt RValEnv RVal m x => [Mod] -> RValT m RValCxt
 rcxtUpdDatatypes mods = do
@@ -296,7 +294,7 @@
   -- liftIO $ print cx'
   return cx'
 
-{-# LINE 329 "src/ehc/CoreRun/Run/Val.chs" #-}
+{-# LINE 327 "src/ehc/CoreRun/Run/Val.chs" #-}
 -- | HpPtr is index into a heap
 type HpPtr = Int
 
@@ -320,7 +318,7 @@
   ml <- newIORef 1.5
   return $ Heap vs 0 fr ml
 
-{-# LINE 354 "src/ehc/CoreRun/Run/Val.chs" #-}
+{-# LINE 352 "src/ehc/CoreRun/Run/Val.chs" #-}
 -- | Garbage collect heap (TBD)
 heapGcM :: (RunSem RValCxt RValEnv RVal m x) => RVal -> RValT m RVal
 -- heapGcM = err $ "CoreRun.Run.Val.heapGcM: GC not yet implemented"
@@ -428,7 +426,7 @@
     -- rsemSetTrace False
     return curV
 
-{-# LINE 463 "src/ehc/CoreRun/Run/Val.chs" #-}
+{-# LINE 461 "src/ehc/CoreRun/Run/Val.chs" #-}
 -- | Allocate on the heap
 heapAllocM :: (RunSem RValCxt RValEnv RVal m x) => RVal -> RValT m HpPtr
 heapAllocM v = do
@@ -495,7 +493,7 @@
   heapUpdM' hp p f
 {-# INLINE heapUpdM #-}
 
-{-# LINE 535 "src/ehc/CoreRun/Run/Val.chs" #-}
+{-# LINE 533 "src/ehc/CoreRun/Run/Val.chs" #-}
 -- | Mapping between constr name and tag
 type RValDataconstrInfoNm2Tg = Map.Map String Int		-- from constructor name to tag
 type RValDataconstrInfoTg2Nm = CRArray String			-- from tag to constructor Name
@@ -542,7 +540,7 @@
   where candtg cs = [ (cn,t) | DataCon_Con {conNm_DataCon_Con=cn, tagNr_DataCon_Con=t} <- cs ]
         splitTN n = (hsnQualified n, maybe [] (:[]) $ hsnQualifier n)
 
-{-# LINE 591 "src/ehc/CoreRun/Run/Val.chs" #-}
+{-# LINE 589 "src/ehc/CoreRun/Run/Val.chs" #-}
 -- | Frame holding locals indexed by RRef_Loc
 type RValFrame 	= HpPtr		-- ^ points in heap to a RVal_Frame
 type RValModule = HpPtr		-- ^ points in heap to a RVal_Module
@@ -574,7 +572,7 @@
   gl <- MV.new 0
   return $ RValEnv md gl st tp hp False False rtst
 
-{-# LINE 624 "src/ehc/CoreRun/Run/Val.chs" #-}
+{-# LINE 622 "src/ehc/CoreRun/Run/Val.chs" #-}
 -- | Resolve module names into indirection/re-indexing table
 renvResolveModNames :: (RunSem RValCxt RValEnv RVal m x) => [HsName] -> RValT m [Int]
 renvResolveModNames nms = do
@@ -583,7 +581,7 @@
         lkup n nm = (liftIO $ MV.read ms n >>= heapGetM'' hp) >>= \(RVal_Module {rvalModNm=nm'}) -> if nm == nm' then return n else lkup (n-1) nm
     forM nms $ lkup (MV.length ms - 1)
 
-{-# LINE 634 "src/ehc/CoreRun/Run/Val.chs" #-}
+{-# LINE 632 "src/ehc/CoreRun/Run/Val.chs" #-}
 -- | Get the top most frame ptr from the stack, 'nullPtr' if absent
 renvTopFramePtrM :: (RunSem RValCxt RValEnv RVal m x) => RValT m HpPtr
 renvTopFramePtrM = do
@@ -604,7 +602,7 @@
 renvTopFrameM = renvTopFramePtrM >>= heapGetM
 {-# INLINE renvTopFrameM #-}
 
-{-# LINE 656 "src/ehc/CoreRun/Run/Val.chs" #-}
+{-# LINE 654 "src/ehc/CoreRun/Run/Val.chs" #-}
 -- | Get all non empty stack frames, still split up in (possibly null) top frame and rest of stack
 renvAllFrameM' :: (RunSem RValCxt RValEnv RVal m x) => RValT m (Maybe HpPtr,[HpPtr])
 renvAllFrameM' = do
@@ -619,7 +617,7 @@
   (mbtop,st) <- renvAllFrameM'
   return $ maybe [] (:[]) mbtop ++ st
 
-{-# LINE 672 "src/ehc/CoreRun/Run/Val.chs" #-}
+{-# LINE 670 "src/ehc/CoreRun/Run/Val.chs" #-}
 -- | Dump environment
 dumpPpEnvM :: (RunSem RValCxt RValEnv RVal m x) => Bool -> RValT m PP_Doc
 dumpPpEnvM extensive = do
@@ -659,18 +657,18 @@
     ppb hp k v = (liftIO $ ppRValWithHp hp v) >>= \vpp -> return $ k >|< ":" >#< vpp
     ppa off hp sz vs = forM [0 .. sz - 1] $ \i -> liftIO (MV.read vs i) >>= ppb hp (i + off)
 
-{-# LINE 713 "src/ehc/CoreRun/Run/Val.chs" #-}
+{-# LINE 711 "src/ehc/CoreRun/Run/Val.chs" #-}
 -- | Dump environment
 dumpEnvM :: (RunSem RValCxt RValEnv RVal m x) => Bool -> RValT m ()
 dumpEnvM extensive = dumpPpEnvM extensive >>= \p -> liftIO $ putPPLn p >> hFlush stdout
 
-{-# LINE 723 "src/ehc/CoreRun/Run/Val.chs" #-}
+{-# LINE 721 "src/ehc/CoreRun/Run/Val.chs" #-}
 -- | RunT' variant for Val
 type RValT m a = RunT' RValCxt RValEnv RVal m a
 -- type RValT m a = RunT' () () RValEnv m a
 
 
-{-# LINE 734 "src/ehc/CoreRun/Run/Val.chs" #-}
+{-# LINE 732 "src/ehc/CoreRun/Run/Val.chs" #-}
 -- | Marshalling from/to Haskell values
 class HSMarshall hs where
   -- | Marshall to Haskell value, also parameterized by evaluator
@@ -685,7 +683,7 @@
   hsUnmarshall = ghsUnmarshall . from
   {-# INLINE hsUnmarshall #-}
 
-{-# LINE 750 "src/ehc/CoreRun/Run/Val.chs" #-}
+{-# LINE 748 "src/ehc/CoreRun/Run/Val.chs" #-}
 instance HSMarshall Int where
   hsMarshall _ (RVal_Int v) = return v
   hsMarshall _ v            = err $ "CoreRun.Run.Val.HSMarshall Int:" >#< v
@@ -782,12 +780,12 @@
   hsUnmarshall v = rsemPush $ RHsV_Handle v
   {-# INLINE hsUnmarshall #-}
 
-{-# LINE 848 "src/ehc/CoreRun/Run/Val.chs" #-}
+{-# LINE 846 "src/ehc/CoreRun/Run/Val.chs" #-}
 instance HSMarshall Bool
 
 instance HSMarshall x => HSMarshall [x]
 
-{-# LINE 854 "src/ehc/CoreRun/Run/Val.chs" #-}
+{-# LINE 852 "src/ehc/CoreRun/Run/Val.chs" #-}
 -- | Generic marshalling from/to Haskell values
 class GHSMarshall hs where
   -- | Marshall to Haskell value, also parameterized by evaluator
@@ -819,7 +817,7 @@
         Just (RValDataconstrInfo {rdciNm2Tg=con2tg}) ->
           sumFillTagged con2tg x
 
-{-# LINE 887 "src/ehc/CoreRun/Run/Val.chs" #-}
+{-# LINE 885 "src/ehc/CoreRun/Run/Val.chs" #-}
 -- | Marshall util: extract values from sum
 class MarshallSum hs where
   --
@@ -875,7 +873,7 @@
   {-# INLINE sumExtrTagged #-}
 
 
-{-# LINE 944 "src/ehc/CoreRun/Run/Val.chs" #-}
+{-# LINE 942 "src/ehc/CoreRun/Run/Val.chs" #-}
 -- | Marshall util: extract values from product (inspired by Aeson library)
 class MarshallProduct hs where
   -- | Fill vector from product
@@ -939,14 +937,14 @@
   productExtrMVec evl mv ix _ = return U1
   {-# INLINE productExtrMVec #-}
 
-{-# LINE 1009 "src/ehc/CoreRun/Run/Val.chs" #-}
+{-# LINE 1007 "src/ehc/CoreRun/Run/Val.chs" #-}
 -- | Phantom type tagging (from Aeson lib)
 newtype Tagged s b = Tagged {unTagged :: b}
 
 -- | Phantom type tagging for higher kinds (from Aeson lib)
 newtype Tagged2 (s :: * -> *) b = Tagged2 {unTagged2 :: b}
 
-{-# LINE 1017 "src/ehc/CoreRun/Run/Val.chs" #-}
+{-# LINE 1015 "src/ehc/CoreRun/Run/Val.chs" #-}
 -- | Size (nr of fields) of data type constructors (from Aeson lib)
 class ProductSize f where
   productSize :: Tagged2 f Int
@@ -964,7 +962,7 @@
   productSize = Tagged2 0
   {-# INLINE productSize #-}
 
-{-# LINE 1040 "src/ehc/CoreRun/Run/Val.chs" #-}
+{-# LINE 1038 "src/ehc/CoreRun/Run/Val.chs" #-}
 {-
 -- | Loop over a vector, starting at lower bound 'l', ending before 'h'
 vecLoop :: Monad m => Int -> Int -> (V.Vector a -> Int -> m b) -> V.Vector a -> m ()
@@ -982,13 +980,13 @@
 {-# INLINE vecLoopReverse #-}
 
 
-{-# LINE 1059 "src/ehc/CoreRun/Run/Val.chs" #-}
+{-# LINE 1057 "src/ehc/CoreRun/Run/Val.chs" #-}
 -- | Right to left forM_
 vecReverseForM_ :: Monad m => V.Vector a -> (a -> m x) -> m ()
 vecReverseForM_ v m = vecLoopReverse 0 (V.length v) (\_ i -> m (v V.! i)) v
 {-# INLINE vecReverseForM_ #-}
 
-{-# LINE 1070 "src/ehc/CoreRun/Run/Val.chs" #-}
+{-# LINE 1068 "src/ehc/CoreRun/Run/Val.chs" #-}
 -- | Allocate a mutable vector of given size
 mvecAllocWith :: PrimMonad m => Int -> a -> m (MV.MVector (PrimState m) a)
 mvecAllocWith = MV.replicate
@@ -1094,13 +1092,13 @@
     l2 = MV.length v2
     l12 = l1 + l2
 
-{-# LINE 1177 "src/ehc/CoreRun/Run/Val.chs" #-}
+{-# LINE 1175 "src/ehc/CoreRun/Run/Val.chs" #-}
 -- | Right to left forM_
 mvecReverseForM_ :: PrimMonad m => MV.MVector (PrimState m) a -> (a -> m x) -> m ()
 mvecReverseForM_ v m = mvecLoopReverse 0 (MV.length v) (\v i -> MV.read v i >>= m) v >> return ()
 {-# INLINE mvecReverseForM_ #-}
 
-{-# LINE 1188 "src/ehc/CoreRun/Run/Val.chs" #-}
+{-# LINE 1186 "src/ehc/CoreRun/Run/Val.chs" #-}
 -- | Dereference a possibly RVal_Ptr
 ptr2valM :: (RunSem RValCxt RValEnv RVal m x) => RVal -> RValT m RVal
 ptr2valM v = case v of
@@ -1172,13 +1170,13 @@
     _ -> err $ "CoreRun.Run.Val.ref2valM.r:" >#< r
 {-# INLINE ref2valM #-}
 
-{-# LINE 1266 "src/ehc/CoreRun/Run/Val.chs" #-}
+{-# LINE 1264 "src/ehc/CoreRun/Run/Val.chs" #-}
 -- | Update top frame
 updTopFrameM :: (RunSem RValCxt RValEnv RVal m x) => (RVal -> RValT m RVal) -> RValT m ()
 updTopFrameM f = renvTopFramePtrM >>= flip heapUpdM f
 {-# INLINE updTopFrameM #-}
 
-{-# LINE 1278 "src/ehc/CoreRun/Run/Val.chs" #-}
+{-# LINE 1276 "src/ehc/CoreRun/Run/Val.chs" #-}
 -- | Push on the stack embedded in the top frame
 renvFrStkPush' :: RunSem RValCxt RValEnv RVal m x => (Int -> RValMV -> v -> IO Int) -> v -> RValT m ()
 renvFrStkPush' pushvOn v = do
@@ -1214,7 +1212,7 @@
 renvFrStkReversePushV = renvFrStkPush' (\sp frvs vs -> mvecReverseFillFromV sp frvs vs >> return (sp + V.length vs))
 {-# INLINE renvFrStkReversePushV #-}
 
-{-# LINE 1315 "src/ehc/CoreRun/Run/Val.chs" #-}
+{-# LINE 1313 "src/ehc/CoreRun/Run/Val.chs" #-}
 -- | Pop from the stack embedded in the top frame
 renvFrStkPop' :: RunSem RValCxt RValEnv RVal m x => (RValMV -> Int -> IO v) -> Int -> RValT m v
 renvFrStkPop' popvFrom sz = do
@@ -1258,7 +1256,7 @@
 renvFrStkReversePopMV sz = (liftIO $ mvecAlloc sz) >>= \vs -> renvFrStkReversePopInMV 0 sz vs >> return vs
 {-# INLINE renvFrStkReversePopMV #-}
 
-{-# LINE 1364 "src/ehc/CoreRun/Run/Val.chs" #-}
+{-# LINE 1362 "src/ehc/CoreRun/Run/Val.chs" #-}
 -- | Trace
 rsemTr' :: (PP msg, RunSem RValCxt RValEnv RVal m x) => Bool -> msg -> RValT m ()
 rsemTr' dumpExtensive msg = do
diff --git a/src/UHC/Light/Compiler/CoreRun/Run/Val/Prim.hs b/src/UHC/Light/Compiler/CoreRun/Run/Val/Prim.hs
--- a/src/UHC/Light/Compiler/CoreRun/Run/Val/Prim.hs
+++ b/src/UHC/Light/Compiler/CoreRun/Run/Val/Prim.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE DeriveGeneric #-}
+-- {-# LANGUAGE DeriveGeneric #-}
 -- {-# OPTIONS_GHC -O2 #-}
 
 module UHC.Light.Compiler.CoreRun.Run.Val.Prim
@@ -67,6 +67,9 @@
       (RP_primShiftRightInt	, [RVal_Int i1, RVal_Int i2]) -> rsemPush $ RVal_Int $ i1 `shiftR` i2
       (RP_primRotateLeftInt	, [RVal_Int i1, RVal_Int i2]) -> rsemPush $ RVal_Int $ i1 `rotateL` i2
       (RP_primRotateRightInt, [RVal_Int i1, RVal_Int i2]) -> rsemPush $ RVal_Int $ i1 `rotateR` i2
+      {-
+      (RP_primBitSize		, [RVal_Int i1]				) -> rsemPush $ RVal_Int $ bitSize i1 -- fromJust $ bitSizeMaybe i1
+      -}
       (RP_primBitSize		, [RVal_Int i1]				) -> rsemPush $ RVal_Int $ fromJust $ bitSizeMaybe i1
       (RP_primBitSizeMaybe	, [RVal_Int i1]				) -> hsUnmarshall $ bitSizeMaybe i1
       (RP_primPopCount		, [RVal_Int i1]				) -> rsemPush $ RVal_Int $ popCount i1
@@ -274,7 +277,7 @@
 
       (pr, _) -> err $ "CoreRun.Run.Val.Prim:" >#< show pr
 
-{-# LINE 303 "src/ehc/CoreRun/Run/Val/Prim.chs" #-}
+{-# LINE 306 "src/ehc/CoreRun/Run/Val/Prim.chs" #-}
 -- | Voidify IO on RVal level, i.e. make IO ()
 -- rvalVoid :: (RunSem RValCxt RValEnv RVal m RVal) => RValT m a -> RValT m RVal
 rvalVoid :: (RunSem RValCxt RValEnv RVal m a) => RValT m b -> RValT m a
@@ -328,7 +331,7 @@
   liftIO (io x' y') >>= hsUnmarshall
 -- {-# INLINE primIO_2Arg0Res #-}
 
-{-# LINE 362 "src/ehc/CoreRun/Run/Val/Prim.chs" #-}
+{-# LINE 365 "src/ehc/CoreRun/Run/Val/Prim.chs" #-}
 deriving instance Generic IOMode
 instance HSMarshall IOMode
 
diff --git a/src/UHC/Light/Compiler/EH.hs b/src/UHC/Light/Compiler/EH.hs
--- a/src/UHC/Light/Compiler/EH.hs
+++ b/src/UHC/Light/Compiler/EH.hs
@@ -66,6 +66,10 @@
 
 
 
+deriving instance Typeable AGItf
+
+
+
 ehIsDeclVal :: Decl -> Bool
 ehIsDeclVal (Decl_Val _ _ _) = True
 ehIsDeclVal _                = False
diff --git a/src/UHC/Light/Compiler/EHC/ASTHandler.hs b/src/UHC/Light/Compiler/EHC/ASTHandler.hs
new file mode 100644
--- /dev/null
+++ b/src/UHC/Light/Compiler/EHC/ASTHandler.hs
@@ -0,0 +1,232 @@
+{-# LANGUAGE ExistentialQuantification #-}
+
+module UHC.Light.Compiler.EHC.ASTHandler
+( ASTParser (..)
+, ASTHandler' (..)
+, emptyASTHandler'
+, ASTHandler (..)
+, ASTHandlerMp
+, ASTSuffixInfo (..)
+, ASTSuffixRel, mkASTSuffixRel, mkASTSuffixRel', emptyASTSuffixRel, astsuffixLookup, astsuffixLookupSuff, astsuffixLookupLens
+, asthdlrOutputIO
+, asthdlrMkInputFPath
+, astsuffixLookupTmLens )
+where
+import UHC.Light.Compiler.EHC.Common
+import UHC.Light.Compiler.EHC.CompileUnit
+import UHC.Light.Compiler.EHC.CompileRun
+import Data.Typeable
+import GHC.Generics
+import qualified Data.Map as Map
+import qualified UHC.Util.RelMap as Rel
+import UHC.Util.Lens
+import qualified UHC.Util.ScanUtils as ScanUtils
+import UHC.Light.Compiler.Base.ParseUtils
+import UHC.Util.Time
+
+
+
+{-# LINE 41 "src/ehc/EHC/ASTHandler.chs" #-}
+data ASTParser ast
+  = forall prs inp sym symmsg pos .
+      ( EHParser prs inp sym symmsg pos
+      ) =>
+		ASTParser
+		  { unASTParser 	:: EHPrs prs inp sym pos ast
+		  }
+
+{-# LINE 55 "src/ehc/EHC/ASTHandler.chs" #-}
+data ASTHandler' ast
+  = -- forall prs inp sym symmsg pos . -- msg .
+      -- ( PP msg
+      -- , EHParser prs inp sym symmsg pos
+      -- ) =>
+		ASTHandler'
+		  {
+		  --- * Meta
+
+		  --- | Meta info: name of ast
+			_asthdlrName				:: !String
+
+		  --- * File
+
+		  --- | Construct output FPath from module name, path, suffix
+		  , _asthdlrMkInputFPath		:: EHCOpts -> EHCompileUnit -> HsName -> FPath -> String -> FPath
+
+		  --- | Construct output FPath from module name, path, suffix
+		  , _asthdlrMkOutputFPath		:: EHCOpts -> HsName -> FPath -> String -> FPath
+
+		  --- | Suffix info
+		  , _asthdlrSuffixRel			:: ASTSuffixRel ast
+
+		  --- * Compile unit
+
+		  --- | Update EHCompileUnit
+		  , _asthdlrEcuStore			:: EcuUpdater ast
+
+		  --- * Output, pretty printing
+
+		  --- | Generate a pretty printed text version
+		  , _asthdlrPretty				:: EHCOpts -> EHCompileUnit -> ast -> Maybe PP_Doc
+
+		  --- | Generate a serialized binary version directly on file, yielding True if this could be done
+		  , _asthdlrPutSerializeFileIO 	:: FilePath -> ast -> IO Bool
+
+		  --- * Output
+
+		  --- | Write to an ast to a file in the IO monad, return True if could be done
+		  , _asthdlrOutputIO			:: ASTFileContent -> EHCOpts -> EHCompileUnit -> HsName -> FPath -> FilePath -> ast -> IO Bool
+
+		  --- * Input, textual, parsing
+
+		  --- | Scanning parameterisation
+		  , _asthdlrParseScanOpts 		:: EHCOpts -> EHParseOpts -> ScanUtils.ScanOpts
+
+		  --- | Parsing
+		  , _asthdlrParser				:: EHCOpts -> EHParseOpts -> Maybe (ASTParser ast)
+
+		  --- * Input, parsing
+
+		  --- | Input an ast
+		  , _asthdlrInput				:: forall m . EHCCompileRunner m => ASTFileContent -> HsName -> EHCompilePhaseT m (Maybe ast)
+
+		  --- | Read/decode from serialized binary version on file
+		  , _asthdlrGetSerializeFileIO 	:: EHCOpts -> FPath -> IO (Maybe ast)
+
+		  --- | Check after deserialization
+		  , _asthdlrPostInputCheck 		:: EHCOpts -> EHCompileUnit -> HsName -> FPath -> ast -> [Err]
+
+		  }
+		  deriving Typeable
+
+{-# LINE 124 "src/ehc/EHC/ASTHandler.chs" #-}
+emptyASTHandler' :: forall ast . ASTHandler' ast
+emptyASTHandler'
+  = ASTHandler'
+      { _asthdlrName 				= "Unknown AST"
+      , _asthdlrSuffixRel 			= (emptyASTSuffixRel :: ASTSuffixRel ast)
+
+      , _asthdlrMkInputFPath		= \_ _ _ fp s -> fpathSetSuff s fp
+      , _asthdlrMkOutputFPath		= mkOutputFPath
+
+      , _asthdlrEcuStore			= const id
+
+      , _asthdlrPretty				= \_ _ _ -> Nothing
+      , _asthdlrPutSerializeFileIO	= \_ _ -> return False
+      , _asthdlrOutputIO 			= \_ _ _ _ _ _ _ -> return False
+
+      , _asthdlrInput 				= \_ _ -> return Nothing
+      , _asthdlrParseScanOpts		= \_ _ -> ScanUtils.defaultScanOpts
+      , _asthdlrParser				= \_ _ -> (Nothing :: Maybe (ASTParser ast))
+      , _asthdlrGetSerializeFileIO	= \_ _ -> return Nothing
+      , _asthdlrPostInputCheck		= \_ _ _ _ _ -> []
+      }
+
+{-# LINE 156 "src/ehc/EHC/ASTHandler.chs" #-}
+data ASTHandler
+  = forall ast .
+      Typeable ast =>
+        ASTHandler (ASTHandler' ast)
+
+{-# LINE 163 "src/ehc/EHC/ASTHandler.chs" #-}
+type ASTHandlerMp = Map.Map ASTType ASTHandler
+
+{-# LINE 171 "src/ehc/EHC/ASTHandler.chs" #-}
+-- | Per suffix AST specific info
+data ASTSuffixInfo ast
+  = ASTSuffixInfo
+      { _astsuffinfoSuff		:: String
+      , _astsuffinfoASTLensMp	:: Map.Map ASTFileTiming (Lens EHCompileUnit (Maybe ast))
+      , _astsuffinfoModfTimeMp	:: Map.Map ASTFileTiming (Lens EHCompileUnit (Maybe ClockTime))
+      }
+  deriving (Typeable, Generic)
+
+instance Eq (ASTSuffixInfo ast) where
+  i1 == i2 = _astsuffinfoSuff i1 == _astsuffinfoSuff i2
+
+instance Ord (ASTSuffixInfo ast) where
+  i1 `compare` i2 = _astsuffinfoSuff i1 `compare` _astsuffinfoSuff i2
+
+{-# LINE 190 "src/ehc/EHC/ASTHandler.chs" #-}
+type ASTSuffixRel ast = Rel.Rel ASTSuffixKey (ASTSuffixInfo ast)
+
+emptyASTSuffixRel :: ASTSuffixRel ast
+emptyASTSuffixRel = Rel.empty
+
+mkASTSuffixRel'
+  :: AssocL
+       ASTSuffixKey
+       ( String
+       , AssocL ASTFileTiming (Lens EHCompileUnit (Maybe ast))
+       , AssocL ASTFileTiming (Lens EHCompileUnit (Maybe ClockTime))
+       )
+     -> ASTSuffixRel ast
+mkASTSuffixRel' l = Rel.fromList
+  [ ( sk
+    , ASTSuffixInfo
+        s
+        (Map.fromList il)
+        (Map.fromList cl)
+    )
+  | (sk,(s,il,cl)) <- l
+  ]
+
+mkASTSuffixRel
+  :: AssocL
+       ASTSuffixKey
+       ( String
+       , Lens EHCompileUnit (Maybe ast)
+       , Maybe (Lens EHCompileUnit (Maybe ClockTime))
+       )
+     -> ASTSuffixRel ast
+mkASTSuffixRel l = mkASTSuffixRel' $
+  [ ( sk
+    , ( s
+      , [(ASTFileTiming_Current,i)]
+      , maybe [] (\c -> [(ASTFileTiming_Current,c)]) mc
+    ) )
+  | (sk,(s,i,mc)) <- l
+  ]
+
+-- | Lookup suffix info
+astsuffixLookup :: ASTSuffixKey -> ASTSuffixRel ast -> Maybe (ASTSuffixInfo ast)
+astsuffixLookup = Rel.lookupDom
+
+-- | Lookup suffix
+astsuffixLookupSuff :: ASTSuffixKey -> ASTSuffixRel ast -> Maybe String
+astsuffixLookupSuff k r = fmap _astsuffinfoSuff $ astsuffixLookup k r
+
+-- | Lookup lens
+astsuffixLookupLens :: ASTSuffixKey -> ASTFileTiming -> ASTSuffixRel ast -> Maybe (Lens EHCompileUnit (Maybe ast))
+astsuffixLookupLens sk tk r = do
+  i <- astsuffixLookup sk r
+  Map.lookup tk $ _astsuffinfoASTLensMp i
+
+{-# LINE 260 "src/ehc/EHC/ASTHandler.chs" #-}
+-- | Lookup lens for modf time of
+astsuffixLookupTmLens :: ASTSuffixKey -> ASTFileTiming -> ASTSuffixRel ast -> Maybe (Lens EHCompileUnit (Maybe ClockTime))
+astsuffixLookupTmLens sk tk r = do
+  i <- astsuffixLookup sk r
+  Map.lookup tk $ _astsuffinfoModfTimeMp i
+
+{-# LINE 272 "src/ehc/EHC/ASTHandler.chs" #-}
+-- | Write to an ast to a file in the IO monad, return True if could be done
+asthdlrOutputIO :: ASTHandler' ast -> ASTFileContent -> EHCOpts -> EHCompileUnit -> HsName -> FPath -> FilePath -> ast -> IO Bool
+asthdlrOutputIO hdlr how opts ecu modNm fpC fnC ast = do
+    fpathEnsureExists fpC
+    case how of
+      ASTFileContent_Text -> do
+        case _asthdlrPretty hdlr opts ecu ast of
+          Just ppAst -> do
+            putPPFPath fpC ppAst 1000
+            return True
+          _ -> return False
+      ASTFileContent_Binary -> do
+        _asthdlrPutSerializeFileIO hdlr fnC ast
+      _ -> return False
+
+{-# LINE 291 "src/ehc/EHC/ASTHandler.chs" #-}
+-- | Construct a FPath given a handler
+asthdlrMkInputFPath :: ASTHandler' ast -> EHCOpts -> EHCompileUnit -> ASTSuffixKey -> HsName -> FPath -> FPath
+asthdlrMkInputFPath hdlr opts ecu skey modNm fp = _asthdlrMkInputFPath hdlr opts ecu modNm fp suff
+  where suff = maybe "" id $ astsuffixLookupSuff skey $ _asthdlrSuffixRel hdlr
diff --git a/src/UHC/Light/Compiler/EHC/ASTHandler/Instances.hs b/src/UHC/Light/Compiler/EHC/ASTHandler/Instances.hs
new file mode 100644
--- /dev/null
+++ b/src/UHC/Light/Compiler/EHC/ASTHandler/Instances.hs
@@ -0,0 +1,287 @@
+{-# LANGUAGE RecordWildCards #-}
+
+module UHC.Light.Compiler.EHC.ASTHandler.Instances
+( module UHC.Light.Compiler.EHC.ASTHandler
+, astHandler'_HS
+, astHandler'_EH
+, astHandler'_Core
+, astHandler'_CoreRun
+, allASThandlerMp
+, asthandlerLookup
+, asthandlerLookup'
+, astHandler'_HI )
+where
+import UHC.Light.Compiler.EHC.Common
+import UHC.Light.Compiler.EHC.CompileUnit
+import UHC.Light.Compiler.EHC.CompileRun
+import qualified UHC.Light.Compiler.Config as Cfg
+import UHC.Light.Compiler.EHC.ASTHandler
+import qualified Data.Map as Map
+import qualified Data.IntMap as IMap
+import Data.Maybe
+import qualified UHC.Util.RelMap as Rel
+import Data.Typeable
+import GHC.Generics
+import UHC.Light.Compiler.Base.ParseUtils
+import qualified UHC.Light.Compiler.EH as EH
+import qualified UHC.Light.Compiler.HS as HS
+import qualified UHC.Light.Compiler.Core as Core
+import qualified UHC.Light.Compiler.CoreRun as CoreRun
+import qualified UHC.Light.Compiler.EH.MainAG as EHSem
+import qualified UHC.Light.Compiler.HS.MainAG as HSSem
+import qualified UHC.Light.Compiler.Core.ToGrin as Core2GrSem
+import qualified UHC.Light.Compiler.Core.ToCoreRun as Core2CoreRunSem
+import qualified UHC.Light.Compiler.Core.Check as Core2ChkSem
+import UHC.Light.Compiler.Core.Trf.EraseExtractTysigCore
+import qualified UHC.Light.Compiler.CoreRun.Check as CoreRun2ChkSem
+import UHC.Light.Compiler.CoreRun as CoreRun
+import UHC.Light.Compiler.Core.ToCoreRun
+import UHC.Light.Compiler.CoreRun.Pretty
+import UHC.Light.Compiler.Core as Core
+import UHC.Light.Compiler.Core.Pretty
+import UU.Parsing
+import UU.Parsing.Offside
+import qualified UHC.Util.ScanUtils as ScanUtils
+import UHC.Light.Compiler.Scanner.Common
+import UHC.Util.ParseUtils
+import qualified UHC.Light.Compiler.EH.Parser as EHPrs
+import qualified UHC.Light.Compiler.HS.Parser as HSPrs
+import qualified UHC.Light.Compiler.Core.Parser as CorePrs
+import qualified UHC.Light.Compiler.CoreRun.Parser as CoreRunPrs
+import Control.Exception as CE
+import qualified UHC.Light.Compiler.HI as HI
+import qualified UHC.Light.Compiler.HS.ModImpExp as HSSemMod
+import qualified UHC.Util.Binary as Bin
+import UHC.Util.Serialize
+import UHC.Light.Compiler.Module.ImportExport
+import UHC.Light.Compiler.CodeGen.ImportUsedModules
+import UHC.Util.Time
+import System.Directory
+import qualified UHC.Light.Compiler.HI as HI
+import qualified UHC.Light.Compiler.Config as Cfg
+import qualified UHC.Light.Compiler.SourceCodeSig as Sig
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{-# LINE 170 "src/ehc/EHC/ASTHandler/Instances.chs" #-}
+astHandler'_HS :: ASTHandler' HS.AGItf
+astHandler'_HS = mk emptyASTHandler'
+  where mk (hdlr@(ASTHandler' {..})) =
+          emptyASTHandler' -- ASTHandler'
+            { _asthdlrName              = "Haskell"
+            , _asthdlrSuffixRel			= mkASTSuffixRel
+            								[ ( (ASTFileContent_Text	, ASTFileUse_Src), ("hs", ecuMbHS, tmlens) )
+            								, ( (ASTFileContent_LitText, ASTFileUse_Src), ("lhs", ecuMbHS, tmlens) )
+            								]
+            , _asthdlrEcuStore          = ecuStoreHS
+            , _asthdlrParseScanOpts     = \opts popts -> hsScanOpts opts
+            , _asthdlrParser            = \opts popts -> Just $ ASTParser $
+                                            if ehpoptsForImport popts then HSPrs.pAGItfImport opts else
+                                            HSPrs.pAGItf opts
+
+{-
+            -- the rest, avoid record update (http://hackage.haskell.org/trac/ghc/ticket/2595, http://breaks.for.alienz.org/blog/2011/10/21/record-update-for-insufficiently-polymorphic-field/)
+            , _asthdlrMkOutputFPath           = _asthdlrMkOutputFPath
+            , _asthdlrSuffixMp          = _asthdlrSuffixMp
+            , _asthdlrInput             = _asthdlrInput
+-}
+            }
+        tmlens =
+          Just ecuMbSrcTime
+
+
+{-# LINE 208 "src/ehc/EHC/ASTHandler/Instances.chs" #-}
+astHandler'_EH :: ASTHandler' EH.AGItf
+astHandler'_EH = mk emptyASTHandler'
+  where mk (hdlr@(ASTHandler' {..})) =
+          emptyASTHandler' -- ASTHandler'
+            { _asthdlrName              = "EH"
+            , _asthdlrSuffixRel			= mkASTSuffixRel
+            								[ ( (ASTFileContent_Text	, ASTFileUse_Src), ("eh", ecuMbEH, Nothing) )
+            								]
+            , _asthdlrEcuStore          = ecuStoreEH
+            , _asthdlrParseScanOpts     = \opts _ -> ehScanOpts opts
+            , _asthdlrParser            = \_ _ -> Just $ ASTParser EHPrs.pAGItf
+
+{-
+            -- the rest, avoid record update (http://hackage.haskell.org/trac/ghc/ticket/2595, http://breaks.for.alienz.org/blog/2011/10/21/record-update-for-insufficiently-polymorphic-field/)
+            , _asthdlrMkOutputFPath           = _asthdlrMkOutputFPath
+            , _asthdlrSuffixMp          = _asthdlrSuffixMp
+            , _asthdlrInput             = _asthdlrInput
+-}
+            }
+
+{-# LINE 234 "src/ehc/EHC/ASTHandler/Instances.chs" #-}
+astHandler'_HI :: ASTHandler' HI.HIInfo
+astHandler'_HI = mk emptyASTHandler'
+  where mk (hdlr@(ASTHandler' {..})) =
+          emptyASTHandler' -- ASTHandler'
+            { _asthdlrName              = "HI"
+            , _asthdlrSuffixRel			= mkASTSuffixRel'
+            								[ ( (ASTFileContent_Binary	, ASTFileUse_Cache)
+            								  , ("hi"
+            								    , [ (ASTFileTiming_Current, ecuMbHIInfo)
+            								      , (ASTFileTiming_Prev, ecuMbPrevHIInfo)
+            								      ]
+            								    , [ (ASTFileTiming_Prev, ecuMbHIInfoTime)
+            								      ]
+            								  ) )
+            								]
+            , _asthdlrMkInputFPath		= \opts ecu modNm fp suff ->
+												  -- if outputdir is specified, use that location to possibly read hi from.
+              									mkInOrOutputFPathFor (InputFrom_Loc $ ecuFileLocation ecu) opts modNm fp suff
+            , _asthdlrEcuStore          = ecuStoreHIInfo
+			, _asthdlrPutSerializeFileIO= default_asthdlrPutSerializeFileIO
+			, _asthdlrGetSerializeFileIO= \opts fp -> fmap Just $
+			                                CE.catch (getSGetFile (fpathToStr fp) (HI.sgetHIInfo opts))
+                                                     (\(_ :: SomeException) -> return $ HI.emptyHIInfo {HI.hiiValidity = HI.HIValidity_Absent})
+            , _asthdlrPostInputCheck	= \opts ecu modNm fp hiinfo -> case HI.hiiValidity hiinfo of
+                                               HI.HIValidity_WrongMagic | not (ecuCanCompile ecu)
+                                                 ->   [rngLift emptyRange Err_WrongMagic
+                                                         (show modNm)
+                                                         (fpathToStr fp)
+                                                      ]
+                                               HI.HIValidity_Inconsistent | not (ecuCanCompile ecu)
+                                                 ->   [rngLift emptyRange Err_InconsistentHI
+                                                         (show modNm)
+                                                         (fpathToStr fp)
+                                                         [Sig.timestamp, Cfg.installVariant opts, show $ ehcOptTarget opts, show $ ehcOptTargetFlavor opts]
+                                                         [HI.hiiSrcTimeStamp hiinfo   , HI.hiiCompiler hiinfo  , show $ HI.hiiTarget hiinfo, show $ HI.hiiTargetFlavor hiinfo]
+                                                      ]
+                                               _ -> []
+            }
+
+{-# LINE 285 "src/ehc/EHC/ASTHandler/Instances.chs" #-}
+astHandler'_Core :: ASTHandler' Core.CModule
+astHandler'_Core = mk emptyASTHandler'
+  where mk (hdlr@(ASTHandler' {..})) =
+          emptyASTHandler' -- ASTHandler'
+            { _asthdlrName              = "Core"
+            , _asthdlrSuffixRel			= mkASTSuffixRel
+            								[ ( (ASTFileContent_Binary	, ASTFileUse_Target)	, (Cfg.suffixDotlessBinaryCore, ecuMbCore, Nothing) )
+            								, ( (ASTFileContent_Text	, ASTFileUse_Src)		, ("", ecuMbCore, Nothing) )
+            								, ( (ASTFileContent_Text	, ASTFileUse_Dump)		, (Cfg.suffixDotlessOutputTextualCore, ecuMbCore, Nothing) )
+            								, ( (ASTFileContent_Binary	, ASTFileUse_Src)		, ("", ecuMbCore, Nothing) )
+            								, ( (ASTFileContent_Binary	, ASTFileUse_Dump)		, (Cfg.suffixDotlessInputOutputBinaryCore, ecuMbCore, Nothing) )
+            								]
+            							  `Rel.union`
+            							  mkASTSuffixRel'
+            								[ ( (ASTFileContent_Binary	, ASTFileUse_Cache)
+            								  , (Cfg.suffixDotlessBinaryCore
+            								    , [ (ASTFileTiming_Current, ecuMbCore)
+            								      , (ASTFileTiming_Prev, ecuMbCore)
+            								      ]
+            								    , [ (ASTFileTiming_Prev, ecuMbCoreTime)
+            								      ]
+            								  ) )
+            								]
+            , _asthdlrEcuStore          = ecuStoreCore
+            , _asthdlrParseScanOpts     = \opts _ -> coreScanOpts opts
+            , _asthdlrParser            = \opts _ -> Just $ ASTParser (CorePrs.pCModule opts :: EHPrsAna Core.CModule)
+            , _asthdlrPretty			= \opts _ ast -> Just $ ppCModule (opts {- ehcOptCoreOpts = coreOpts ++ ehcOptCoreOpts opts -}) $ cmodTrfEraseTyCore opts ast
+			, _asthdlrPutSerializeFileIO= default_asthdlrPutSerializeFileIO
+			, _asthdlrGetSerializeFileIO= default_asthdlrGetSerializeFileIO
+
+            -- the rest, avoid record update (http://hackage.haskell.org/trac/ghc/ticket/2595, http://breaks.for.alienz.org/blog/2011/10/21/record-update-for-insufficiently-polymorphic-field/)
+            -- , _asthdlrParseParse        = _asthdlrParseParse
+            -- , _asthdlrParseScan         = _asthdlrParseScan
+            -- , _asthdlrParser         = _asthdlrParser
+{-
+            , _asthdlrMkOutputFPath           = _asthdlrMkOutputFPath
+            , _asthdlrSuffixMp          = _asthdlrSuffixMp
+            , _asthdlrInput             = _asthdlrInput
+-}
+            }
+
+{-# LINE 340 "src/ehc/EHC/ASTHandler/Instances.chs" #-}
+astHandler'_CoreRun :: ASTHandler' CoreRun.Mod
+astHandler'_CoreRun = mk emptyASTHandler'
+  where mk (hdlr@(ASTHandler' {..})) =
+          emptyASTHandler' -- ASTHandler'
+            { _asthdlrName              = "CoreRun"
+            , _asthdlrSuffixRel			= mkASTSuffixRel
+            								[ ( (ASTFileContent_Binary	, ASTFileUse_Target)	, (Cfg.suffixDotlessBinaryCoreRun, ecuMbCoreRun, Nothing) )
+            								, ( (ASTFileContent_Text	, ASTFileUse_Src)		, ("", ecuMbCoreRun, Nothing) )
+            								, ( (ASTFileContent_Text	, ASTFileUse_Dump)		, (Cfg.suffixDotlessOutputTextualCoreRun, ecuMbCoreRun, Nothing) )
+            								, ( (ASTFileContent_Binary	, ASTFileUse_Src)		, ("", ecuMbCoreRun, Nothing) )
+            								, ( (ASTFileContent_Binary	, ASTFileUse_Dump)		, (Cfg.suffixDotlessInputOutputBinaryCoreRun, ecuMbCoreRun, Nothing) )
+            								]
+            							  `Rel.union`
+            							  mkASTSuffixRel'
+            								[ ( (ASTFileContent_Binary	, ASTFileUse_Cache)
+            								  , (Cfg.suffixDotlessBinaryCoreRun
+            								    , [ (ASTFileTiming_Current, ecuMbCoreRun)
+            								      , (ASTFileTiming_Prev, ecuMbCoreRun)
+            								      ]
+            								    , [ (ASTFileTiming_Prev, ecuMbCoreRunTime)
+            								      ]
+            								  ) )
+            								]
+            , _asthdlrEcuStore          = ecuStoreCoreRun
+            , _asthdlrParseScanOpts     = \opts _ -> corerunScanOpts
+            , _asthdlrParser            = \opts _ -> Just $ ASTParser (CoreRunPrs.pMod opts :: EHPrsAna CoreRun.Mod)
+            , _asthdlrPretty			= \opts _ ast -> Just $ ppMod' opts ast
+			, _asthdlrPutSerializeFileIO= default_asthdlrPutSerializeFileIO
+			, _asthdlrGetSerializeFileIO= default_asthdlrGetSerializeFileIO
+
+            -- the rest, avoid record update (http://hackage.haskell.org/trac/ghc/ticket/2595, http://breaks.for.alienz.org/blog/2011/10/21/record-update-for-insufficiently-polymorphic-field/)
+            -- , _asthdlrParseParse        = _asthdlrParseParse
+            -- , _asthdlrParseScan         = _asthdlrParseScan
+            -- , _asthdlrParser         = _asthdlrParser
+{-
+            , _asthdlrMkOutputFPath           = _asthdlrMkOutputFPath
+            , _asthdlrSuffixMp          = _asthdlrSuffixMp
+            , _asthdlrInput             = _asthdlrInput
+-}
+            }
+
+{-# LINE 474 "src/ehc/EHC/ASTHandler/Instances.chs" #-}
+-- | Global mapping from ASTType to ast handler
+allASThandlerMp :: ASTHandlerMp
+allASThandlerMp = Map.fromList
+  [ ( ASTType_HS			, ASTHandler astHandler'_HS			)
+  , ( ASTType_EH			, ASTHandler astHandler'_EH			)
+  , ( ASTType_HI			, ASTHandler astHandler'_HI			)
+  , ( ASTType_Core			, ASTHandler astHandler'_Core		)
+  , ( ASTType_CoreRun		, ASTHandler astHandler'_CoreRun	)
+  ]
+
+{-# LINE 501 "src/ehc/EHC/ASTHandler/Instances.chs" #-}
+-- | Lookup ast handler, forcing a particular ast type
+asthandlerLookup :: Typeable ast => ASTType -> Maybe (ASTHandler' ast)
+asthandlerLookup t = case Map.lookup t allASThandlerMp of
+    Just (ASTHandler h) -> cast h
+    _                   -> Nothing
+
+{-# LINE 509 "src/ehc/EHC/ASTHandler/Instances.chs" #-}
+-- | Lookup ast handler, allowing arbitrary type by hiding the type
+asthandlerLookup' :: ASTType -> (forall ast . ASTHandler' ast -> Maybe x) -> Maybe x
+asthandlerLookup' t f = case Map.lookup t allASThandlerMp of
+    Just (ASTHandler h) -> f h
+    _                   -> Nothing
+
+{-# LINE 521 "src/ehc/EHC/ASTHandler/Instances.chs" #-}
+default_asthdlrGetSerializeFileIO :: Serialize ast => EHCOpts -> FPath -> IO (Maybe ast)
+default_asthdlrGetSerializeFileIO _ fp = fmap Just $ getSerializeFile (fpathToStr fp)
+
+default_asthdlrPutSerializeFileIO :: Serialize ast => FilePath -> ast -> IO Bool
+default_asthdlrPutSerializeFileIO fn ast = putSerializeFile fn ast >> return True
+
diff --git a/src/UHC/Light/Compiler/EHC/BuildFunction.hs b/src/UHC/Light/Compiler/EHC/BuildFunction.hs
--- a/src/UHC/Light/Compiler/EHC/BuildFunction.hs
+++ b/src/UHC/Light/Compiler/EHC/BuildFunction.hs
@@ -1,48 +1,218 @@
-{-# LANGUAGE GADTs #-}
+{-# LANGUAGE GADTs, TemplateHaskell #-}
 
 module UHC.Light.Compiler.EHC.BuildFunction
-( BFun (..) )
+( module Data.Functor.Identity
+, BFun' (..)
+, BFun (..)
+, BFunCacheEntry (..)
+, BCache, emptyBCache, bcacheCache, bcacheDpdRel
+, bcacheLookup, bcacheInsert, bcacheInsertDpd
+, BRef (..)
+, BState, emptyBState, bstateCache, bstateCallStack )
 where
 import UHC.Light.Compiler.EHC.Common
 import UHC.Light.Compiler.EHC.CompileUnit
 import Control.Applicative
+import Data.Functor.Identity
+import qualified Data.Map as Map
+import qualified Data.IntMap as IMap
+import Data.Maybe
+import UHC.Util.Hashable
+import UHC.Util.Lens
+import qualified UHC.Util.RelMap as Rel
+import Data.Typeable
+import UHC.Util.Time
 
-{-# LINE 29 "src/ehc/EHC/BuildFunction.chs" #-}
--- | Representation of build functions (embedded comment screws up haddock, hence see source code directly)
-data BFun res where
+
+{-# LINE 50 "src/ehc/EHC/BuildFunction.chs" #-}
+deriving instance Typeable Identity
+
+{-# LINE 58 "src/ehc/EHC/BuildFunction.chs" #-}
+-- | Representation of build functions (embedded comment screws up haddock, hence see source code directly).
+-- Regretfully deriving Generic (and thus Hashable) does not work for GADTs, so must be done manually, below.
+-- Ord cannot be derived either.
+-- First order type, no fields with recursive type are allowed to allow for more easily implementable comparison etc.
+data BFun' res where
+  --- | Obtain FPath and module name of a file name
+  FPathSearchForFile
+    :: !String				--- ^ suffix, if absent in name
+    -> !FilePath			--- ^ file name
+    -> BFun' (HsName, FPath)
+
   --- | Obtain FPath of an (imported module)
   FPathOfImported
-    :: HsName				--- ^ module name
-    -> BFun FPath
+    :: !HsName				--- ^ module name
+    -> BFun' FPath
 
   --- | Extract imported modules from a module
   ImportsOf
-    :: HsName				--- ^ module name
-    -> BFun [HsName]
+    :: !HsName				--- ^ module name
+    -> BFun' [HsName]
 
   --- | Extract compileunit from a module
-  EcuOf
-    :: HsName				--- ^ module name
-    -> BFun EHCompileUnit
+  EcuOfName
+    :: !HsName				--- ^ module name
+    -> BFun' EHCompileUnit
 
-  --- | Applicative: pure
-  Pure
-    :: res
-    -> BFun res
+  EcuOfNameAndPath
+    :: !(Maybe PrevSearchInfo)		--- ^ possibly previous search info
+    -> !(HsName,Maybe FPath)		--- ^ module name and possibly known path
+    -> BFun' EHCompileUnit
 
-  --- | Applicative: <*>
-  App
-    :: BFun (res1 -> res2)
-    -> BFun res1
-    -> BFun res2
+  --- | Extract global options, possibly overridden for a module
+  EHCOptsOf
+    :: !HsName				--- ^ module name
+    -> BFun' EHCOpts
 
-instance Functor BFun where
-  fmap f (Pure  x) = Pure (f x)
-  fmap f (App g x) = App (fmap (f .) g) x
-  fmap _ _         = panic "BuildFuncion.Functor.BFun"
+  --- | Get a particular AST from file for a module
+  ASTFromFile
+    :: !(HsName,Maybe FPath)			--- ^ module name and possibly known path
+    -> !ASTType							--- ^ content type
+    -> !ASTSuffixKey					--- ^ suffix and content variation
+    -> !ASTFileTiming					--- ^ timing (i.e. previous or current)
+    -> BFun' (Maybe res)
 
-instance Applicative BFun where
-  pure  = Pure
-  (<*>) = App
+  --- | Get the modification ClockTime of a file for a module
+  ModfTimeOfFile
+    :: !HsName							--- ^ module name and possibly known path
+    -> !ASTType							--- ^ content type
+    -> !ASTSuffixKey					--- ^ suffix and content variation
+    -> !ASTFileTiming					--- ^ timing (i.e. previous or current)
+    -> BFun' (Maybe ClockTime)
 
+-- | Comparison which ignores GADT type info
+bfunCompare :: BFun' res1 -> BFun' res2 -> Ordering
+bfunCompare f1 f2 = case (f1,f2) of
+    (FPathSearchForFile 	a1 b1		, FPathSearchForFile 	a2 b2		) -> lexico [a1 `compare` a2, b1 `compare` b2]
+    (FPathOfImported    	a1   		, FPathOfImported    	a2   		) ->         a1 `compare` a2
+    (ImportsOf          	a1   		, ImportsOf          	a2   		) ->         a1 `compare` a2
+    (EcuOfName              a1   		, EcuOfName    			a2   		) ->         a1 `compare` a2
+    (EcuOfNameAndPath		a1 b1		, EcuOfNameAndPath		a2 b2		) -> lexico [a1 `compare` a2, b1 `compare` b2]
+    (EHCOptsOf             	a1   		, EHCOptsOf				a2   		) ->         a1 `compare` a2
+    (ASTFromFile            a1 b1 c1 d1	, ASTFromFile			a2 b2 c2 d2	) -> lexico [a1 `compare` a2, b1 `compare` b2, c1 `compare` c2, d1 `compare` d2]
+    (ModfTimeOfFile         a1 b1 c1 d1	, ModfTimeOfFile		a2 b2 c2 d2	) -> lexico [a1 `compare` a2, b1 `compare` b2, c1 `compare` c2, d1 `compare` d2]
+  where lexico (x:xs)
+          | x == EQ   = lexico xs
+          | otherwise = x
+        lexico []     = EQ
+
+instance Ord (BFun' res) where
+  compare = bfunCompare
+
+deriving instance Eq (BFun' res)
+deriving instance Show (BFun' res)
+deriving instance Typeable BFun'
+
+instance Hashable (BFun' res) where
+  hashWithSalt salt x = case x of
+	FPathSearchForFile 	a b		-> salt `hashWithSalt` (0::Int) `hashWithSalt` a `hashWithSalt` b
+	FPathOfImported	   	a		-> salt `hashWithSalt` (1::Int) `hashWithSalt` a
+	ImportsOf		   	a		-> salt `hashWithSalt` (2::Int) `hashWithSalt` a
+	EcuOfName		   	a		-> salt `hashWithSalt` (3::Int) `hashWithSalt` a
+	EHCOptsOf		   	a		-> salt `hashWithSalt` (4::Int) `hashWithSalt` a
+	EcuOfNameAndPath	a b		-> salt `hashWithSalt` (5::Int) `hashWithSalt` a `hashWithSalt` b
+	ASTFromFile			a b	c d	-> salt `hashWithSalt` (6::Int) `hashWithSalt` a `hashWithSalt` b `hashWithSalt` c `hashWithSalt` d
+	ModfTimeOfFile		a b	c d	-> salt `hashWithSalt` (7::Int) `hashWithSalt` a `hashWithSalt` b `hashWithSalt` c `hashWithSalt` d
+
+
+{-# LINE 167 "src/ehc/EHC/BuildFunction.chs" #-}
+-- | BFun' used as a dependency of another BFun', for now same as a Dynamic
+data BFun
+  = forall res
+    . ({- Typeable (BFun' res), -} Typeable res)
+      => BFun
+           { bfcdFun 		:: !(BFun' res)
+           }
+
+instance Eq BFun where
+  (BFun {bfcdFun=f1}) == (BFun {bfcdFun=f2}) = bfunCompare f1 f2 == EQ
+
+instance Ord BFun where
+  (BFun {bfcdFun=f1}) `compare` (BFun {bfcdFun=f2}) = bfunCompare f1 f2
+
+instance Hashable BFun where
+  hashWithSalt salt (BFun {bfcdFun=x}) = hashWithSalt salt x
+
+{-# LINE 186 "src/ehc/EHC/BuildFunction.chs" #-}
+-- | BFun' + BCachedVal' packaged with required class instances, similar to a Dynamic
+data BFunCacheEntry
+  = forall f res
+    . (Typeable f, Typeable res)
+      => BFunCacheEntry
+           { bfceFun 		:: !(BFun' res)
+           , bfceVal		:: !(f res)
+           }
+
+{-# LINE 201 "src/ehc/EHC/BuildFunction.chs" #-}
+-- | Cache for function calls, first indexed on hash
+data BCache
+  = BCache
+      { _bcacheCache	:: IMap.IntMap [BFunCacheEntry]
+      , _bcacheDpdRel	:: Rel.Rel BFun BFun
+      }
+
+mkLabel ''BCache
+
+emptyBCache :: BCache
+emptyBCache = BCache IMap.empty Rel.empty
+
+{-# LINE 215 "src/ehc/EHC/BuildFunction.chs" #-}
+-- | Lookup BCachedVal in 'BCache', preserving type info
+bcacheLookup :: (Typeable res, Typeable f) => BFun' res -> BCache -> Maybe (f res)
+bcacheLookup key (BCache {_bcacheCache=cache}) = do
+    vals <- IMap.lookup (hash key) cache
+    lookup key $ catMaybes $ map cvt vals
+  where
+    cvt (BFunCacheEntry {bfceFun=f, bfceVal=v}) = case (cast f, cast v) of
+      (Just f', Just v') -> Just (f',v')
+      _                  -> Nothing
+
+-- | Add to 'BCache'
+bcacheInsert :: (Typeable res, Typeable f) => BFun' res -> f res -> BCache -> BCache
+bcacheInsert k v bc@(BCache {_bcacheCache=c}) = bc { _bcacheCache = IMap.insertWith (++) (hash k) [BFunCacheEntry k v] c }
+
+-- | Add dependency to 'BCache'
+bcacheInsertDpd
+  :: (Typeable res1, Typeable res2)
+     =>
+        BFun' res1			-- ^ dependee
+     -> BFun' res2			-- ^ depends on
+     -> BCache -> BCache
+bcacheInsertDpd f1 f2 bc@(BCache {_bcacheDpdRel=dpd}) = bc { _bcacheDpdRel = Rel.insert (BFun f1) (BFun f2) dpd }
+
+{-# LINE 244 "src/ehc/EHC/BuildFunction.chs" #-}
+-- | GADT for references to global state, interpreted inside the compiler driver monad, the type of the GADT telling what the type of the value should be.
+data BRef val where
+  --- | Compile unit
+  BRef_ECU
+    :: !HsName					--- ^ module name
+    -> BRef EHCompileUnit
+
+  --- | An AST embedded in a compile unit
+  BRef_AST
+    :: !HsName					--- ^ module name
+    -> ASTType							--- ^ content type
+    -> ASTSuffixKey						--- ^ suffix and content variation
+    -> ASTFileTiming			--- ^ timing (i.e. previous or current)
+    -> BRef val
+
+  --- | Global options
+  BRef_EHCOpts
+    :: !HsName					--- ^ module name
+    -> BRef EHCOpts
+
+deriving instance Typeable BRef
+
+{-# LINE 272 "src/ehc/EHC/BuildFunction.chs" #-}
+-- | Cache for function calls, first indexed on hash
+data BState
+  = BState
+      { _bstateCache		:: !BCache
+      , _bstateCallStack	:: ![BFun]
+      }
+
+mkLabel ''BState
+
+emptyBState :: BState
+emptyBState = BState emptyBCache []
 
diff --git a/src/UHC/Light/Compiler/EHC/BuildFunction/Run.hs b/src/UHC/Light/Compiler/EHC/BuildFunction/Run.hs
--- a/src/UHC/Light/Compiler/EHC/BuildFunction/Run.hs
+++ b/src/UHC/Light/Compiler/EHC/BuildFunction/Run.hs
@@ -1,25 +1,157 @@
 {-# LANGUAGE GADTs #-}
 
 module UHC.Light.Compiler.EHC.BuildFunction.Run
-( runBFun )
+( module UHC.Light.Compiler.EHC.BuildFunction
+, bcall
+, bderef )
 where
 import UHC.Light.Compiler.EHC.BuildFunction
+import UHC.Light.Compiler.EHC.Common
 import UHC.Light.Compiler.EHC.CompileRun
 import UHC.Light.Compiler.EHC.CompileUnit
+import UHC.Light.Compiler.EHC.FileSuffMp
+import UHC.Light.Compiler.EHC.ASTHandler
+import UHC.Light.Compiler.EHC.ASTHandler.Instances
+import UHC.Util.Lens
+import Data.Typeable
+import qualified Data.Map as Map
+import Control.Monad.State
+import System.Directory
+import UHC.Light.Compiler.Base.PackageDatabase
 
-{-# LINE 29 "src/ehc/EHC/BuildFunction/Run.chs" #-}
-runBFun :: EHCCompileRunner m => BFun res -> EHCompilePhaseT m res
-runBFun bfun = do
-    case bfun of
-      -- Applicative part
-      Pure res -> return res
-      App  f a -> do
-          f' <- runBFun f
-          a' <- runBFun a
-          return $ f' a'
 
-      -- The actual work
-      EcuOf modNm -> do
-           return undefined
-      _ -> return undefined
+
+
+{-# LINE 53 "src/ehc/EHC/BuildFunction/Run.chs" #-}
+-- | Execute a build function, possibly caching/memoizing a result
+bcall :: forall res m . (Typeable res) => EHCCompileRunner m => BFun' res -> EHCompilePhaseT m res
+bcall bfun = do
+    bcache <- getl $ st ^* bstateCache
+
+    mbCachedRes <- lkup bfun bcache
+    case mbCachedRes of
+      Just res -> return res
+      _ -> do
+        -- prepare
+        start
+        -- actual execution
+        res <- case bfun of
+          EcuOfName modNm -> do
+               bcall $ EcuOfNameAndPath Nothing (modNm, Nothing)
+
+          EHCOptsOf modNm -> do
+               fmap (panicJust "EHCOptsOf") $ bderef (BRef_EHCOpts modNm)
+
+          EcuOfNameAndPath mbPrev (modNm,mbFp) -> do
+               opts <- bcall $ EHCOptsOf modNm
+               let isTopModule = isJust mbFp
+                   searchPath = ehcOptImportFileLocPath opts
+                   adaptFileSuffMp = if isTopModule then (fileSuffMpHsNoSuff ++) else id
+               fileSuffMpHs <- fmap (map tup123to12 . adaptFileSuffMp) $ getl $ crStateInfo ^* crsiFileSuffMp
+               let searchPath' = prevSearchInfoAdaptedSearchPath mbPrev searchPath
+               fpsFound <- cpFindFilesForFPathInLocations (fileLocSearch opts) tup123to1 False fileSuffMpHs searchPath' (Just modNm) mbFp
+               when (ehcOptVerbosity opts >= VerboseDebug) $ liftIO $ do
+                    putStrLn $ show modNm ++ ": " ++ show (fmap fpathToStr mbFp) ++ ": " ++ show (map fpathToStr fpsFound)
+                    putStrLn $ "searchPath: " ++ show searchPath'
+               when isTopModule
+                    (cpUpdCU modNm (ecuSetIsTopMod True))
+               bmemo $ BRef_ECU modNm
+               fmap (panicJust "EcuOfNameAndPath") $ cpMbCU modNm
+
+          FPathSearchForFile suff fn -> do
+               let fp    = mkTopLevelFPath suff fn
+                   modNm = mkHNm $ fpathBase fp
+               breturn (modNm, fp)
+
+          ASTFromFile mf@(modNm,_) asttype skey tkey -> case asthandlerLookup asttype of
+               Just (hdlr :: ASTHandler' res) -> case astsuffixLookup skey $ _asthdlrSuffixRel hdlr of
+                 Just suffinfo -> do
+                   ecu <- bcall $ EcuOfNameAndPath Nothing mf
+                   let ref = BRef_AST modNm asttype skey tkey
+                   -- (_,set) <- bderef'
+                   -- TBD: the actual input
+                   -- breturn ref
+                   return Nothing
+                 _ -> return Nothing
+               _ -> return Nothing
+
+          ModfTimeOfFile modNm asttype skey tkey -> case (asthandlerLookup' asttype $ \hdlr -> do
+                                                              suffinfo <- astsuffixLookup skey $ _asthdlrSuffixRel hdlr
+                                                              lens <- Map.lookup tkey $ _astsuffinfoModfTimeMp suffinfo
+                                                              return (_astsuffinfoSuff suffinfo, lens)
+                                                         ) of
+                 Just (suff, lens) -> do
+                        cr <- get
+                        let (ecu,_,opts,fp) = crBaseInfo modNm cr
+                        tm opts ecu ((lens ^=) . Just) (fpathSetSuff suff fp)
+                 _ -> return Nothing
+            where
+              tm opts ecu store fp = do
+                  let n = fpathToStr fp
+                  nExists <- liftIO $ doesFileExist n
+                  when (ehcOptVerbosity opts >= VerboseDebug) $ liftIO $ putStrLn ("meta info of: " ++ show (ecuModNm ecu) ++ ", file: " ++ n ++ ", exists: " ++ show nExists)
+                  if nExists
+                    then do
+                      t <- liftIO $ fpathGetModificationTime fp
+                      when (ehcOptVerbosity opts >= VerboseDebug) $ liftIO $ putStrLn ("time stamp of: " ++ show (ecuModNm ecu) ++ ", time: " ++ show t)
+                      cpUpdCU modNm $ store t
+                      return $ Just t
+                    else return Nothing
+
+          _ -> panic $ "BuildFunction.Run.bcall: not implemented: " ++ show bfun
+
+        -- finalize
+        end
+        return res
+  where
+    st    = crStateInfo ^* crsiBState
+
+    start = st ^* bstateCallStack =$: (BFun bfun :)
+    end   = st ^* bstateCallStack =$: tail
+
+    -- memoize
+    bmemo :: Typeable f => f res -> EHCompilePhaseT m ()
+    bmemo res = do
+        (BFun bfun : _) <- getl $ st ^* bstateCallStack
+        case cast bfun of
+          Just bfun -> st ^* bstateCache =$: bcacheInsert bfun res
+          _ -> panic $ "BuildFunction.Run.bcall.bmemo: " ++ show bfun
+
+    -- memoize & return
+    breturn :: res -> EHCompilePhaseT m res
+    breturn res = do
+        bmemo (Identity res)
+        return res
+
+    lkup :: BFun' res -> BCache -> EHCompilePhaseT m (Maybe res)
+    lkup bfun bcache =
+        case bcacheLookup bfun bcache of
+          Just (res :: Identity res) -> return $ Just $ runIdentity res
+          _ -> case bcacheLookup bfun bcache of
+            Just (ref :: BRef res) -> bderef ref
+            _ -> return Nothing
+
+{-# LINE 181 "src/ehc/EHC/BuildFunction/Run.chs" #-}
+-- | Dereference an indirection into compilation state, possibly with a result, and a setter
+bderef' :: forall res m . (Typeable res, EHCCompileRunner m) => BRef res -> EHCompilePhaseT m (Maybe res, Maybe (res -> EHCompilePhaseT m ()))
+bderef' bref = do
+    cr <- get
+    case bref of
+      BRef_ECU modNm -> return (crMbCU modNm cr, Just $ \ecu -> cpUpdCU modNm (const ecu))
+      BRef_EHCOpts modNm -> return (Just choose, Nothing)
+        where opts = cr ^. crStateInfo ^. crsiOpts
+              choose = maybe opts id $ crMbCU modNm cr >>= ecuMbOpts
+      BRef_AST modNm asttype skey tkey -> case asthandlerLookup asttype of
+          Just (hdlr :: ASTHandler' res) -> case astsuffixLookup skey $ _asthdlrSuffixRel hdlr of
+            Just suffinfo -> case Map.lookup tkey $ _astsuffinfoASTLensMp suffinfo of
+              Just l -> do
+                ecu <- bcall $ EcuOfName modNm
+                return (ecu ^. l, Just $ \ast -> cpUpdCU modNm $ l ^= Just ast)
+              _ -> return (Nothing, Nothing)
+            _ -> return (Nothing, Nothing)
+          _ -> return (Nothing, Nothing)
+
+-- | Dereference an indirection into compilation state
+bderef :: forall res m . (Typeable res, EHCCompileRunner m) => BRef res -> EHCompilePhaseT m (Maybe res)
+bderef bref = fmap fst $ bderef' bref
 
diff --git a/src/UHC/Light/Compiler/EHC/Common.hs b/src/UHC/Light/Compiler/EHC/Common.hs
--- a/src/UHC/Light/Compiler/EHC/Common.hs
+++ b/src/UHC/Light/Compiler/EHC/Common.hs
@@ -15,6 +15,14 @@
 , ecuStateIsCoreRun
 , EHCompileUnitKind (..)
 , ecuStateToKind
+, ASTType (..)
+, ASTFileContent (..)
+, ASTHandlerKey
+, ASTFileUse (..)
+, ASTSuffixKey
+, ASTFileTiming (..)
+, FileSuffInitState
+, PrevSearchInfo
 , FinalCompileHow (..)
 , mkShellCmd, mkShellCmd', showShellCmd
 , mkInOrOutputFPathDirFor
@@ -25,7 +33,8 @@
 , hsstateIsLiteral
 , hsstateShowLit
 , hsstateNext
-, CState (..), OState (..) )
+, CState (..), OState (..)
+, prevSearchInfoAdaptedSearchPath )
 where
 import Data.List
 import Data.Char
@@ -41,18 +50,20 @@
 import UHC.Light.Compiler.Opts
 import UHC.Light.Compiler.Error
 import UHC.Light.Compiler.Error.Pretty
+import GHC.Generics
 import UHC.Light.Compiler.Gam.Full
 import UHC.Light.Compiler.Opts.CommandLine
+import qualified UHC.Util.RelMap as Rel
 import UHC.Util.Time
 import System.Directory
 
 
 
 
-{-# LINE 35 "src/ehc/EHC/Common.chs" #-}
+{-# LINE 40 "src/ehc/EHC/Common.chs" #-}
 -- dummy, so module is not empty for initial variants, and exports will take effect
 
-{-# LINE 45 "src/ehc/EHC/Common.chs" #-}
+{-# LINE 50 "src/ehc/EHC/Common.chs" #-}
 data HSState
   = HSStart                 -- starting from .hs
   | HSAllSem                -- done all semantics for .hs
@@ -66,19 +77,19 @@
   | LHSOnlyImports          -- done imports from .lhs
   deriving (Show,Eq)
 
-{-# LINE 66 "src/ehc/EHC/Common.chs" #-}
+{-# LINE 71 "src/ehc/EHC/Common.chs" #-}
 hsstateIsLiteral :: HSState -> Bool
 hsstateIsLiteral LHSStart       = True
 hsstateIsLiteral LHSOnlyImports = True
 hsstateIsLiteral _              = False
 
-{-# LINE 75 "src/ehc/EHC/Common.chs" #-}
+{-# LINE 80 "src/ehc/EHC/Common.chs" #-}
 hsstateShowLit :: HSState -> String
 hsstateShowLit LHSStart       = "Literal"
 hsstateShowLit LHSOnlyImports = "Literal"
 hsstateShowLit _              = ""
 
-{-# LINE 86 "src/ehc/EHC/Common.chs" #-}
+{-# LINE 91 "src/ehc/EHC/Common.chs" #-}
 hsstateNext :: HSState -> HSState
 hsstateNext HSStart       = HSOnlyImports
 hsstateNext HIStart       = HIOnlyImports
@@ -86,13 +97,13 @@
 hsstateNext LHSStart      = LHSOnlyImports
 hsstateNext st            = st
 
-{-# LINE 99 "src/ehc/EHC/Common.chs" #-}
+{-# LINE 104 "src/ehc/EHC/Common.chs" #-}
 data EHState
   = EHStart
   | EHAllSem
   deriving (Show,Eq)
 
-{-# LINE 108 "src/ehc/EHC/Common.chs" #-}
+{-# LINE 113 "src/ehc/EHC/Common.chs" #-}
 -- | State for .c files
 data CState
   = CStart
@@ -105,7 +116,7 @@
   | OAllSem
   deriving (Show,Eq)
 
-{-# LINE 124 "src/ehc/EHC/Common.chs" #-}
+{-# LINE 129 "src/ehc/EHC/Common.chs" #-}
 data CRState
   = CRStartBinary
   | CRStartText
@@ -113,7 +124,7 @@
   | CRAllSem
   deriving (Show,Eq)
 
-{-# LINE 133 "src/ehc/EHC/Common.chs" #-}
+{-# LINE 138 "src/ehc/EHC/Common.chs" #-}
 data CRRState
   = CRRStartBinary
   -- | CRRStartText
@@ -121,7 +132,7 @@
   | CRRAllSem
   deriving (Show,Eq)
 
-{-# LINE 144 "src/ehc/EHC/Common.chs" #-}
+{-# LINE 149 "src/ehc/EHC/Common.chs" #-}
 data EHCompileUnitState
   = ECUS_Unknown
   | ECUS_Haskell !HSState
@@ -134,7 +145,7 @@
   | ECUS_Fail
   deriving (Show,Eq)
 
-{-# LINE 164 "src/ehc/EHC/Common.chs" #-}
+{-# LINE 169 "src/ehc/EHC/Common.chs" #-}
 -- | The final state
 ecuStateFinalDestination :: (EHCompileUnitState -> EHCompileUnitState) -> EHCompileUnitState -> EHCompileUnitState
 ecuStateFinalDestination postModf
@@ -147,28 +158,28 @@
         n (ECUS_CoreRun _) = ECUS_CoreRun CRRAllSem
         n _                = ECUS_Fail
 
-{-# LINE 184 "src/ehc/EHC/Common.chs" #-}
+{-# LINE 189 "src/ehc/EHC/Common.chs" #-}
 -- | Is compilation from Core source
 ecuStateIsCore :: EHCompileUnitState -> Bool
 ecuStateIsCore st = case st of
   ECUS_Core _ -> True
   _           -> False
 
-{-# LINE 194 "src/ehc/EHC/Common.chs" #-}
+{-# LINE 199 "src/ehc/EHC/Common.chs" #-}
 -- | Is compilation from CoreRun source
 ecuStateIsCoreRun :: EHCompileUnitState -> Bool
 ecuStateIsCoreRun st = case st of
   ECUS_CoreRun _ -> True
   _              -> False
 
-{-# LINE 208 "src/ehc/EHC/Common.chs" #-}
+{-# LINE 213 "src/ehc/EHC/Common.chs" #-}
 data EHCompileUnitKind
   = EHCUKind_HS     -- Haskell: .hs .lhs .hi
   | EHCUKind_C      -- C: .c
   | EHCUKind_None   -- Nothing
   deriving Eq
 
-{-# LINE 218 "src/ehc/EHC/Common.chs" #-}
+{-# LINE 223 "src/ehc/EHC/Common.chs" #-}
 ecuStateToKind :: EHCompileUnitState -> EHCompileUnitKind
 ecuStateToKind s
   = case s of
@@ -176,12 +187,92 @@
       ECUS_C       _ -> EHCUKind_C
       _              -> EHCUKind_None
 
-{-# LINE 233 "src/ehc/EHC/Common.chs" #-}
+{-# LINE 238 "src/ehc/EHC/Common.chs" #-}
+-- | An 'Enum' of all types of ast we can deal with
+data ASTType
+  = ASTType_HS
+  | ASTType_EH
+  | ASTType_HI
+  | ASTType_Core
+  | ASTType_CoreRun
+  | ASTType_C
+  | ASTType_O
+  | ASTType_Unknown
+  deriving (Eq, Ord, Enum, Typeable, Generic, Bounded, Show)
+
+instance Hashable ASTType
+
+{-# LINE 271 "src/ehc/EHC/Common.chs" #-}
+-- | File content variations of ast we can deal with (in principle)
+data ASTFileContent
+  = ASTFileContent_Text
+  | ASTFileContent_LitText
+  | ASTFileContent_Binary
+  | ASTFileContent_Unknown
+  deriving (Eq, Ord, Enum, Typeable, Generic, Bounded, Show)
+
+instance Hashable ASTFileContent
+
+{-# LINE 283 "src/ehc/EHC/Common.chs" #-}
+-- | Combination of 'ASTType' and 'ASTFileContent' as key into map of handlers
+type ASTHandlerKey = (ASTType, ASTFileContent)
+
+{-# LINE 288 "src/ehc/EHC/Common.chs" #-}
+-- | File usage variations of ast
+data ASTFileUse
+  = ASTFileUse_Cache		-- ^ internal use cache on file
+  | ASTFileUse_Dump			-- ^ output: dumped, possibly usable as src later on
+  | ASTFileUse_Target		-- ^ output: as target of compilation
+  | ASTFileUse_Src			-- ^ input: src file
+  | ASTFileUse_Unknown		-- ^ unknown
+  deriving (Eq, Ord, Enum, Typeable, Generic, Bounded, Show)
+
+instance Hashable ASTFileUse
+
+{-# LINE 301 "src/ehc/EHC/Common.chs" #-}
+-- | Key for allowed suffixes, multiples allowed to cater for different suffixes
+type ASTSuffixKey = (ASTFileContent, ASTFileUse)
+
+{-# LINE 306 "src/ehc/EHC/Common.chs" #-}
+-- | File timing variations of ast
+data ASTFileTiming
+  = ASTFileTiming_Prev		-- ^ previously generated
+  | ASTFileTiming_Current	-- ^ current one
+  deriving (Eq, Ord, Enum, Typeable, Generic, Bounded, Show)
+
+instance Hashable ASTFileTiming
+
+{-# LINE 320 "src/ehc/EHC/Common.chs" #-}
+-- | initial state/settings categorizing the kind of file/ast dealing with
+type FileSuffInitState =
+     ( EHCompileUnitState
+     , ASTType
+     , ASTFileContent
+     , ASTFileUse
+     )
+
+{-# LINE 334 "src/ehc/EHC/Common.chs" #-}
+type PrevSearchInfo = (HsName,(FPath,FileLoc))
+
+{-# LINE 338 "src/ehc/EHC/Common.chs" #-}
+-- | strip tail part corresponding to module name, and use it to search as well
+prevSearchInfoAdaptedSearchPath :: Maybe PrevSearchInfo -> FileLocPath -> FileLocPath
+prevSearchInfoAdaptedSearchPath (Just (prevNm,(prevFp,prevLoc))) searchPath
+  = case (fpathMbDir (mkFPath prevNm), fpathMbDir prevFp, prevLoc) of
+	  (_, _, p) | filelocIsPkg p
+		-> p : searchPath
+	  (Just n, Just p, _)
+		-> mkDirFileLoc (filePathUnPrefix prefix) : searchPath
+		where (prefix,_) = splitAt (length p - length n) p
+	  _ -> searchPath
+prevSearchInfoAdaptedSearchPath _ searchPath = searchPath
+
+{-# LINE 356 "src/ehc/EHC/Common.chs" #-}
 data FinalCompileHow
   = FinalCompile_Module
   | FinalCompile_Exec
 
-{-# LINE 243 "src/ehc/EHC/Common.chs" #-}
+{-# LINE 366 "src/ehc/EHC/Common.chs" #-}
 mkShellCmd' :: [Cmd] -> FilePath -> CmdLineOpts -> (FilePath,[String])
 mkShellCmd' forCmds cmdStr o = (cmdStr, showCmdLineOpts' forCmds o)
 
@@ -191,7 +282,7 @@
 showShellCmd :: (FilePath,[String]) -> String
 showShellCmd (cmd,args) = concat $ intersperse " " $ [cmd] ++ args
 
-{-# LINE 258 "src/ehc/EHC/Common.chs" #-}
+{-# LINE 381 "src/ehc/EHC/Common.chs" #-}
 mkInOrOutputFPathDirFor :: FPATH nm => InOrOutputFor -> EHCOpts -> nm -> FPath -> String -> (FPath,Maybe String)
 mkInOrOutputFPathDirFor inoutputfor opts modNm fp suffix
   = (fpathSetSuff suffix fp', d)
@@ -210,16 +301,16 @@
                            where d' = filePathUnPrefix d
                     _      -> (fp,Nothing)
 
-{-# LINE 283 "src/ehc/EHC/Common.chs" #-}
+{-# LINE 406 "src/ehc/EHC/Common.chs" #-}
 mkInOrOutputFPathFor :: FPATH nm => InOrOutputFor -> EHCOpts -> nm -> FPath -> String -> FPath
 mkInOrOutputFPathFor inoutputfor opts modNm fp suffix
   = fst $ mkInOrOutputFPathDirFor inoutputfor opts modNm fp suffix
 
-{-# LINE 289 "src/ehc/EHC/Common.chs" #-}
+{-# LINE 412 "src/ehc/EHC/Common.chs" #-}
 mkOutputFPath :: FPATH nm => EHCOpts -> nm -> FPath -> String -> FPath
 mkOutputFPath = mkInOrOutputFPathFor OutputFor_Module
 
-{-# LINE 298 "src/ehc/EHC/Common.chs" #-}
+{-# LINE 421 "src/ehc/EHC/Common.chs" #-}
 -- | FPath for per module output
 mkPerModuleOutputFPath :: EHCOpts -> Bool -> HsName -> FPath -> String -> FPath
 mkPerModuleOutputFPath opts doSepBy_ modNm fp suffix
@@ -231,7 +322,7 @@
                where nm_ = mkOutputFPath opts (hsnMapQualified (const base) m) (fpathSetBase base f) suffix
                          where base = hsnShow "_" "_" m
 
-{-# LINE 315 "src/ehc/EHC/Common.chs" #-}
+{-# LINE 438 "src/ehc/EHC/Common.chs" #-}
 -- | FPath for final executable, with possible suffix (and forcing flag, even on given exec)
 mkPerExecOutputFPath :: EHCOpts -> HsName -> FPath -> Maybe (String, Bool) -> FPath
 mkPerExecOutputFPath opts modNm fp mbSuffix
diff --git a/src/UHC/Light/Compiler/EHC/CompilePhase/Cleanup.hs b/src/UHC/Light/Compiler/EHC/CompilePhase/Cleanup.hs
--- a/src/UHC/Light/Compiler/EHC/CompilePhase/Cleanup.hs
+++ b/src/UHC/Light/Compiler/EHC/CompilePhase/Cleanup.hs
@@ -13,29 +13,29 @@
 cpCleanupHSMod :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpCleanupHSMod modNm
   = cpUpdCU modNm
-      (\e -> e { ecuMbHSSemMod     	  = Nothing
+      (\e -> e { _ecuMbHSSemMod     	  = Nothing
                }
       )
 
 cpCleanupHS :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpCleanupHS modNm
   = cpUpdCU modNm
-      (\e -> e { ecuMbHS              = Nothing
-               , ecuMbHSSem           = Nothing
+      (\e -> e { _ecuMbHS              = Nothing
+               , _ecuMbHSSem           = Nothing
                }
       )
 
 cpCleanupFoldEH :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpCleanupFoldEH modNm
   = cpUpdCU modNm
-      (\e -> e { ecuMbEH              = Nothing
+      (\e -> e { _ecuMbEH              = Nothing
                }
       )
 
 cpCleanupEH :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpCleanupEH modNm
   = cpUpdCU modNm
-      (\e -> e { ecuMbEHSem           = Nothing
+      (\e -> e { _ecuMbEHSem           = Nothing
                }
       )
 
@@ -44,9 +44,9 @@
 cpCleanupCore modNmL
   = cpSeq [cl m | m <- modNmL]
   where cl m = cpUpdCU m
-                  (\e -> e { ecuMbCore            = Nothing
-                           , ecuMbCoreSem         = Nothing
-                           , ecuMbCoreSemMod      = Nothing
+                  (\e -> e { _ecuMbCore            = Nothing
+                           , _ecuMbCoreSem         = Nothing
+                           , _ecuMbCoreSemMod      = Nothing
                            }
                   )
 
@@ -54,8 +54,8 @@
 cpCleanupCU :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpCleanupCU modNm
   = do { cpUpdCU modNm
-           (\e -> e { ecuHIInfo            = {- HI.hiiRetainAfterCleanup -} (ecuHIInfo e)
-                    , ecuMbOptim           = Nothing
+           (\e -> e { ecuMbOptim           = Nothing
+                    -- , _ecuHIInfo            = {- HI.hiiRetainAfterCleanup -} (_ecuHIInfo e)
                     }
            )
        }
@@ -63,10 +63,10 @@
 cpCleanupFlow :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpCleanupFlow modNm
   = cpUpdCU modNm
-      (\e -> e { ecuMbHSSemMod        = Nothing
+      (\e -> e { _ecuMbHSSemMod        = Nothing
                -- , ecuMbPrevHI          = Nothing
                -- , ecuMbPrevHISem       = Nothing
-               -- , ecuMbPrevHIInfo      = Nothing
+               -- , _ecuMbPrevHIInfo      = Nothing
                }
       )
 
diff --git a/src/UHC/Light/Compiler/EHC/CompilePhase/CompileC.hs b/src/UHC/Light/Compiler/EHC/CompilePhase/CompileC.hs
--- a/src/UHC/Light/Compiler/EHC/CompilePhase/CompileC.hs
+++ b/src/UHC/Light/Compiler/EHC/CompilePhase/CompileC.hs
@@ -149,7 +149,7 @@
                              -- ; liftIO $ putStrLn ("pkgKeyDirL: " ++ show pkgKeyDirL)
                              ; liftIO $ putStrLn $ showShellCmd preCPP
                              })
-                  ; when (crModCanCompile modNm cr)
+                  ; when (ecuCanCompile ecu)
                          (do { liftIO $ fpathEnsureExists fpCPP
                              ; cpSystem' (Just $ fpathToStr fpCPP) preCPP
                              ; cpRegisterFilesToRm [fpCPP]
diff --git a/src/UHC/Light/Compiler/EHC/CompilePhase/FlowBetweenPhase.hs b/src/UHC/Light/Compiler/EHC/CompilePhase/FlowBetweenPhase.hs
--- a/src/UHC/Light/Compiler/EHC/CompilePhase/FlowBetweenPhase.hs
+++ b/src/UHC/Light/Compiler/EHC/CompilePhase/FlowBetweenPhase.hs
@@ -9,6 +9,7 @@
 where
 import qualified Data.Map as Map
 import qualified Data.Set as Set
+import UHC.Util.Lens
 import Control.Monad.State
 import UHC.Light.Compiler.EHC.Common
 import UHC.Light.Compiler.EHC.CompileUnit
@@ -40,7 +41,7 @@
 
 
 
-{-# LINE 75 "src/ehc/EHC/CompilePhase/FlowBetweenPhase.chs" #-}
+{-# LINE 78 "src/ehc/EHC/CompilePhase/FlowBetweenPhase.chs" #-}
 prepFlow :: a -> a
 prepFlow x | x `seq` True = x
 -- prepFlow = id
@@ -48,15 +49,15 @@
 gamUnionFlow :: Ord k => Gam k v -> Gam k v -> Gam k v
 gamUnionFlow = gamUnion
 
-{-# LINE 96 "src/ehc/EHC/CompilePhase/FlowBetweenPhase.chs" #-}
+{-# LINE 99 "src/ehc/EHC/CompilePhase/FlowBetweenPhase.chs" #-}
 cpFlowHsSem1 :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpFlowHsSem1 modNm
   =  do  {  cr <- get
          ;  let  (ecu,crsi,opts,_) = crBaseInfo modNm cr
-                 hsSem  = panicJust "cpFlowHsSem1" $ ecuMbHSSem ecu
-                 ehInh  = crsiEHInh crsi
-                 hsInh  = crsiHSInh crsi
-                 hii    = ecuHIInfo ecu
+                 hsSem  = panicJust "cpFlowHsSem1" $ _ecuMbHSSem ecu
+                 ehInh  = crsi ^. crsiEHInh
+                 hsInh  = crsi ^. crsiHSInh
+                 hii    = ecu ^. ecuHIInfo
                  ig     = prepFlow $! HSSem.gathIdGam_Syn_AGItf hsSem
                  fg     = prepFlow $! HSSem.gathFixityGam_Syn_AGItf hsSem
                  hsInh' = hsInh
@@ -77,8 +78,8 @@
                         where mk = if ehcOptUseAssumePrelude opts
                                    then \_ n -> n
                                    else \k n -> idQualGamReplacement (EHSem.idQualGam_Inh_AGItf ehInh') k (hsnQualified n)
-         ;  when (isJust (ecuMbHSSem ecu))
-                 (do { cpUpdSI (\crsi -> crsi {crsiHSInh = hsInh', crsiEHInh = ehInh', crsiOpts = opts'})
+         ;  when (isJust (_ecuMbHSSem ecu))
+                 (do { cpUpdSI (\crsi -> crsi {_crsiHSInh = hsInh', _crsiEHInh = ehInh', _crsiOpts = opts'})
                      ; cpUpdCU modNm $! ecuStoreHIInfo hii'
                      -- ; liftIO $ putStrLn (forceEval hii' `seq` "cpFlowHsSem1")
                      })
@@ -86,13 +87,13 @@
          }
 
 
-{-# LINE 139 "src/ehc/EHC/CompilePhase/FlowBetweenPhase.chs" #-}
+{-# LINE 142 "src/ehc/EHC/CompilePhase/FlowBetweenPhase.chs" #-}
 cpFlowEHSem1 :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpFlowEHSem1 modNm
   =  do  {  cr <- get
          ;  let  (ecu,crsi,opts,_) = crBaseInfo modNm cr
-                 ehSem    = panicJust "cpFlowEHSem1.ehSem" $ ecuMbEHSem ecu
-                 ehInh    = crsiEHInh crsi
+                 ehSem    = panicJust "cpFlowEHSem1.ehSem" $ _ecuMbEHSem ecu
+                 ehInh    = crsi ^. crsiEHInh
                  coreInh  = crsiCoreInh crsi
                  dg       = prepFlow $! EHSem.gathDataGam_Syn_AGItf    ehSem
                  vg       = prepFlow $! EHSem.gathValGam_Syn_AGItf     ehSem
@@ -105,7 +106,7 @@
                  cs       = prepFlow $! EHSem.gathChrStore_Syn_AGItf   ehSem
                  lm       = prepFlow $! EHSem.gathLamMp_Syn_AGItf      ehSem
                  mmi      = panicJust "cpFlowEHSem1.crsiModMp" $ Map.lookup modNm $ crsiModMp crsi
-                 hii      = ecuHIInfo ecu
+                 hii      = ecu ^. ecuHIInfo
                  mentrelFilterMp
                           = mentrelFilterMpUnions [ EHSem.gathMentrelFilterMp_Syn_AGItf ehSem, mentrelToFilterMp' False [modNm] (mmiExps mmi) ]
                  usedImpS = mentrelFilterMpModuleNames mentrelFilterMp
@@ -138,10 +139,10 @@
                               { Core2GrSem.dataGam_Inh_CodeAGItf = EHSem.dataGam_Inh_AGItf     ehInh'
                               , Core2GrSem.lamMp_Inh_CodeAGItf   = lm `lamMpUnionBindAspMp` Core2GrSem.lamMp_Inh_CodeAGItf coreInh		-- assumption: no duplicates, otherwise merging as done later has to be done
                               }
-         ;  when (isJust (ecuMbEHSem ecu))
+         ;  when (isJust (_ecuMbEHSem ecu))
                  (do { cpUpdSI
                                (\crsi -> crsi
-                                   { crsiCoreInh = coreInh', crsiEHInh = ehInh' }
+                                   { crsiCoreInh = coreInh', _crsiEHInh = ehInh' }
                                )
                      ; cpUpdCU modNm ( ecuStoreHIInfo hii'
                                      . ecuStoreHIUsedImpS usedImpS
@@ -152,14 +153,14 @@
                      })
          }
 
-{-# LINE 243 "src/ehc/EHC/CompilePhase/FlowBetweenPhase.chs" #-}
+{-# LINE 246 "src/ehc/EHC/CompilePhase/FlowBetweenPhase.chs" #-}
 cpFlowHISem :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpFlowHISem modNm
   =  do  {  cr <- get
          ;  let  (ecu,crsi,_,_) = crBaseInfo modNm cr
                  -- hiSem  = panicJust "cpFlowHISem.hiSem" $ ecuMbPrevHISem ecu
-                 hiInfo = panicJust "cpFlowHISem.hiInfo" $ ecuMbPrevHIInfo ecu
-                 ehInh  = crsiEHInh crsi
+                 hiInfo = panicJust "cpFlowHISem.hiInfo" $ _ecuMbPrevHIInfo ecu
+                 ehInh  = crsi ^. crsiEHInh
                  ehInh' = ehInh
                             { EHSem.valGam_Inh_AGItf     = (HI.hiiValGam     hiInfo) `gamUnionFlow`  EHSem.valGam_Inh_AGItf     ehInh
                             , EHSem.tyGam_Inh_AGItf      = (HI.hiiTyGam      hiInfo) `gamUnionFlow`  EHSem.tyGam_Inh_AGItf      ehInh
@@ -170,7 +171,7 @@
                             , EHSem.clDfGam_Inh_AGItf    = (HI.hiiClDfGam    hiInfo) `gamUnionFlow`  EHSem.clDfGam_Inh_AGItf    ehInh
                             , EHSem.chrStore_Inh_AGItf   = (HI.hiiCHRStore   hiInfo) `chrStoreUnion` EHSem.chrStore_Inh_AGItf   ehInh
                             }
-                 hsInh  = crsiHSInh crsi
+                 hsInh  = crsi ^. crsiHSInh
                  hsInh' = hsInh
                             { HSSem.fixityGam_Inh_AGItf  = (HI.hiiFixityGam    hiInfo) `gamUnionFlow` HSSem.fixityGam_Inh_AGItf hsInh
                             , HSSem.idGam_Inh_AGItf      = (HI.hiiIdDefOccGam  hiInfo) `gamUnionFlow` HSSem.idGam_Inh_AGItf     hsInh
@@ -181,23 +182,23 @@
                               }
                  optim    = crsiOptim crsi
                  optim'   = optim
-         ;  when (isJust (ecuMbPrevHIInfo ecu))
-                 (do { cpUpdSI (\crsi -> crsi { crsiEHInh = ehInh'
-                                              , crsiHSInh = {- tr "cpFlowHISem.crsiHSInh" (pp $ HSSem.idGam_Inh_AGItf hsInh') $ -} hsInh'
+         ;  when (isJust (_ecuMbPrevHIInfo ecu))
+                 (do { cpUpdSI (\crsi -> crsi { _crsiEHInh = ehInh'
+                                              , _crsiHSInh = {- tr "cpFlowHISem.crsiHSInh" (pp $ HSSem.idGam_Inh_AGItf hsInh') $ -} hsInh'
                                               , crsiCoreInh = coreInh'
                                               , crsiOptim = optim'
                                               })
                      })
          }
 
-{-# LINE 294 "src/ehc/EHC/CompilePhase/FlowBetweenPhase.chs" #-}
+{-# LINE 297 "src/ehc/EHC/CompilePhase/FlowBetweenPhase.chs" #-}
 -- | Flow info after Core source check
 cpFlowCoreModSem :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpFlowCoreModSem modNm
   =  do  {  cr <- get
          ;  let  (ecu,crsi,opts,_) = crBaseInfo modNm cr
                  coreInh  = crsiCoreInh crsi
-                 mbCoreModSem = ecuMbCoreSemMod ecu
+                 mbCoreModSem = _ecuMbCoreSemMod ecu
          ;  when (isJust mbCoreModSem) $ do
               { let coreModSem = fromJust mbCoreModSem
                     coreInh' = coreInh
@@ -207,15 +208,15 @@
               }
          }
 
-{-# LINE 314 "src/ehc/EHC/CompilePhase/FlowBetweenPhase.chs" #-}
+{-# LINE 317 "src/ehc/EHC/CompilePhase/FlowBetweenPhase.chs" #-}
 cpFlowCoreSemAfterFold :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpFlowCoreSemAfterFold modNm
   =  do  {  cr <- get
          ;  let  (ecu,crsi,opts,_) = crBaseInfo modNm cr
-                 coreSem  = panicJust "cpFlowCoreSemAfterFold.coreSem" $ ecuMbCoreSem ecu
+                 coreSem  = panicJust "cpFlowCoreSemAfterFold.coreSem" $ _ecuMbCoreSem ecu
 
                  coreInh  = crsiCoreInh crsi
-                 hii      = ecuHIInfo ecu
+                 hii      = ecu ^. ecuHIInfo
                  am       = prepFlow $! Core2GrSem.gathLamMp_Syn_CodeAGItf coreSem
                  coreInh' = coreInh
                               { Core2GrSem.lamMp_Inh_CodeAGItf   = am `lamMpUnionBindAspMp` Core2GrSem.lamMp_Inh_CodeAGItf coreInh	-- assumption: old info can be overridden, otherwise merge should be done here
@@ -223,7 +224,7 @@
                  hii'     = hii
                               { HI.hiiLamMp         = am
                               }
-         ;  when (isJust (ecuMbCoreSem ecu))
+         ;  when (isJust (_ecuMbCoreSem ecu))
                  (do { cpUpdSI (\crsi -> crsi {crsiCoreInh = coreInh'})
                      ; cpUpdCU modNm ( ecuStoreHIInfo hii'
                                      )
@@ -234,12 +235,12 @@
 cpFlowCoreSemBeforeFold modNm
   =  do  {  cr <- get
          ;  let  (ecu,crsi,opts,_) = crBaseInfo modNm cr
-                 core     = panicJust "cpFlowCoreSemBeforeFold.core" $ ecuMbCore ecu
+                 core     = panicJust "cpFlowCoreSemBeforeFold.core" $ _ecuMbCore ecu
 
                  -- 20100717 AD: required here because of inlining etc, TBD
                  (usedImpS, introdModS) = cmodUsedModNms core
 
-                 hii      = ecuHIInfo ecu
+                 hii      = ecu ^. ecuHIInfo
                  hii'     = hii
                               { -- 20100717 AD: required here because of inlining etc, TBD
                                 HI.hiiHIUsedImpModS = usedImpS
@@ -257,26 +258,26 @@
                           )
          }
 
-{-# LINE 365 "src/ehc/EHC/CompilePhase/FlowBetweenPhase.chs" #-}
+{-# LINE 368 "src/ehc/EHC/CompilePhase/FlowBetweenPhase.chs" #-}
 cpFlowHILamMp :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpFlowHILamMp modNm
   = do { cr <- get
        ; let  (ecu,crsi,opts,_) = crBaseInfo modNm cr
               coreInh  = crsiCoreInh crsi
-              hii      = ecuHIInfo ecu
+              hii      = ecu ^. ecuHIInfo
 
          -- put back result: call info map (lambda arity, ...), overwriting previous entries
        ; cpUpdSI (\crsi -> crsi {crsiCoreInh = coreInh {Core2GrSem.lamMp_Inh_CodeAGItf = HI.hiiLamMp hii `lamMpUnionBindAspMp` Core2GrSem.lamMp_Inh_CodeAGItf coreInh}})
        }
 
-{-# LINE 378 "src/ehc/EHC/CompilePhase/FlowBetweenPhase.chs" #-}
+{-# LINE 381 "src/ehc/EHC/CompilePhase/FlowBetweenPhase.chs" #-}
 cpFlowOptim :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpFlowOptim modNm
   =  do  {  cr <- get
          ;  let  (ecu,crsi,_,_) = crBaseInfo modNm cr
                  optim  = crsiOptim crsi
                  moptim = panicJust "cpFlowOptim" $ ecuMbOptim ecu
-                 hii    = ecuHIInfo ecu
+                 hii    = ecu ^. ecuHIInfo
                  optim' = optim
                  hii'   = hii
          ;  when (isJust (ecuMbOptim ecu))
diff --git a/src/UHC/Light/Compiler/EHC/CompilePhase/Module.hs b/src/UHC/Light/Compiler/EHC/CompilePhase/Module.hs
--- a/src/UHC/Light/Compiler/EHC/CompilePhase/Module.hs
+++ b/src/UHC/Light/Compiler/EHC/CompilePhase/Module.hs
@@ -29,25 +29,26 @@
 import qualified UHC.Light.Compiler.Core.Check as Core2ChkSem
 import qualified UHC.Light.Compiler.CoreRun.Check as CoreRun2ChkSem
 import UHC.Light.Compiler.CodeGen.RefGenerator
+import UHC.Light.Compiler.EHC.BuildFunction.Run
 import UHC.Light.Compiler.Base.Debug
 
 
 
 
 
-{-# LINE 55 "src/ehc/EHC/CompilePhase/Module.chs" #-}
+{-# LINE 58 "src/ehc/EHC/CompilePhase/Module.chs" #-}
 -- | Check module dependencies for given 'Mod'
 cpCheckModsModWith :: EHCCompileRunner m => (HsName -> ModMpInfo) -> [Mod] -> EHCompilePhaseT m ()
 cpCheckModsModWith dfltMod modL@(Mod {modName = modNm} : _)
   = do { cr <- get
        ; cpMsg modNm VerboseDebug $ "cpCheckModsModWith modL: " ++ show modL
-       ; let crsi   = crStateInfo cr
+       ; let crsi   = _crStateInfo cr
              (mm,e) = modMpCombine' dfltMod modL (crsiModMp crsi)
        ; cpUpdSI (\crsi -> crsi {crsiModMp = mm})
        ; cpSetLimitErrsWhen 5 "Module analysis" e
        }
 
-{-# LINE 75 "src/ehc/EHC/CompilePhase/Module.chs" #-}
+{-# LINE 78 "src/ehc/EHC/CompilePhase/Module.chs" #-}
 cpCheckModsWithOrWithoutBuiltin :: EHCCompileRunner m => Bool -> [HsName] -> EHCompilePhaseT m ()
 cpCheckModsWithOrWithoutBuiltin bltin modNmL@(modNm:_)
   = do { cr <- get
@@ -58,17 +59,17 @@
   where addBuiltin | bltin     = \m -> m { modImpL = modImpBuiltin : modImpL m }
                    | otherwise = id
 
-{-# LINE 87 "src/ehc/EHC/CompilePhase/Module.chs" #-}
+{-# LINE 90 "src/ehc/EHC/CompilePhase/Module.chs" #-}
 cpCheckModsWithBuiltin :: EHCCompileRunner m => [HsName] -> EHCompilePhaseT m ()
 cpCheckModsWithBuiltin = cpCheckModsWithOrWithoutBuiltin True
 {-# INLINE cpCheckModsWithBuiltin #-}
 
-{-# LINE 93 "src/ehc/EHC/CompilePhase/Module.chs" #-}
+{-# LINE 96 "src/ehc/EHC/CompilePhase/Module.chs" #-}
 cpCheckModsWithoutBuiltin :: EHCCompileRunner m => [HsName] -> EHCompilePhaseT m ()
 cpCheckModsWithoutBuiltin = cpCheckModsWithOrWithoutBuiltin False
 {-# INLINE cpCheckModsWithoutBuiltin #-}
 
-{-# LINE 103 "src/ehc/EHC/CompilePhase/Module.chs" #-}
+{-# LINE 106 "src/ehc/EHC/CompilePhase/Module.chs" #-}
 data GetMeta
   = GetMeta_Src
   | GetMeta_HI
@@ -86,12 +87,12 @@
     ]
 
 
-{-# LINE 132 "src/ehc/EHC/CompilePhase/Module.chs" #-}
+{-# LINE 135 "src/ehc/EHC/CompilePhase/Module.chs" #-}
 cpGetCoreRunModnameAndImports :: EHCCompileRunner m => HsName -> EHCompilePhaseT m HsName
 cpGetCoreRunModnameAndImports modNm
   =  do  {  cr <- get
          ;  let  (ecu,_,opts,_) = crBaseInfo modNm cr
-                 mbCrSemMod = ecuMbCoreRunSemMod ecu
+                 mbCrSemMod = _ecuMbCoreRunSemMod ecu
                  crSemMod   = panicJust "cpGetCoreRunModnameAndImports" mbCrSemMod
                  modNm'     = CoreRun2ChkSem.realModuleNm_Syn_AGItf crSemMod
          ;  cpMsg modNm VerboseDebug $ "cpGetCoreRunModnameAndImports: " ++ show modNm ++ " -> " ++ show modNm'
@@ -104,12 +105,12 @@
               _      -> return modNm
          }
 
-{-# LINE 151 "src/ehc/EHC/CompilePhase/Module.chs" #-}
+{-# LINE 154 "src/ehc/EHC/CompilePhase/Module.chs" #-}
 cpGetCoreModnameAndImports :: EHCCompileRunner m => HsName -> EHCompilePhaseT m HsName
 cpGetCoreModnameAndImports modNm
   =  do  {  cr <- get
          ;  let  (ecu,_,opts,_) = crBaseInfo modNm cr
-                 mbCrSemMod = ecuMbCoreSemMod ecu
+                 mbCrSemMod = _ecuMbCoreSemMod ecu
                  crSemMod   = panicJust "cpGetCoreModnameAndImports" mbCrSemMod
                  modNm'     = Core2ChkSem.realModuleNm_Syn_CodeAGItf crSemMod
          ;  cpMsg modNm VerboseDebug $ "cpGetCoreModnameAndImports: " ++ show modNm ++ " -> " ++ show modNm'
@@ -122,12 +123,12 @@
               _      -> return modNm
          }
 
-{-# LINE 170 "src/ehc/EHC/CompilePhase/Module.chs" #-}
+{-# LINE 173 "src/ehc/EHC/CompilePhase/Module.chs" #-}
 cpGetHsModnameAndImports :: EHCCompileRunner m => HsName -> EHCompilePhaseT m HsName
 cpGetHsModnameAndImports modNm
   =  do  {  cr <- get
          ;  let  (ecu,_,opts,_) = crBaseInfo modNm cr
-                 mbHsSemMod = ecuMbHSSemMod ecu
+                 mbHsSemMod = _ecuMbHSSemMod ecu
                  hsSemMod   = panicJust "cpGetHsModnameAndImports" mbHsSemMod
                  modNm'     = HSSemMod.realModuleNm_Syn_AGItf hsSemMod
                  upd        = ecuStoreHSDeclImpS ( -- (\v -> tr "XX" (pp $ Set.toList v) v) $
@@ -142,7 +143,7 @@
 cpGetHsMod modNm
   =  do  {  cr <- get
          ;  let  (ecu,_,opts,_) = crBaseInfo modNm cr
-                 mbHsSemMod = ecuMbHSSemMod ecu
+                 mbHsSemMod = _ecuMbHSSemMod ecu
                  hsSemMod   = panicJust "cpGetHsMod" mbHsSemMod
                  mod        = HSSemMod.mod_Syn_AGItf hsSemMod
          ;  when (ehcOptVerbosity opts >= VerboseDebug)
@@ -157,26 +158,26 @@
 cpGetMetaInfo gm modNm
   =  do  {  cr <- get
          ;  let (ecu,_,opts,fp) = crBaseInfo modNm cr
-         ;  when (GetMeta_Src `elem` gm)
-                 (tm opts ecu ecuStoreSrcTime        (ecuSrcFilePath ecu))
-         {-
-         ;  when (GetMeta_HI `elem` gm)
-                 (tm opts ecu ecuStoreHITime
-                                              (mkInOrOutputFPathFor (InputFrom_Loc $ ecuFileLocation ecu) opts modNm fp "hi")
-                 )
-         -}
+         ;  when (GetMeta_Src `elem` gm) $
+                 tm opts ecu ecuStoreSrcTime        (ecuSrcFilePath ecu)
+                 -- void $ bcall $ ModfTimeOfFile modNm ASTType_HS (_ecuASTFileContent ecu, ASTFileUse_Src) ASTFileTiming_Current
+
          ;  when (GetMeta_HI `elem` gm)
                  (tm opts ecu ecuStoreHIInfoTime
                                               (mkInOrOutputFPathFor (InputFrom_Loc $ ecuFileLocation ecu) opts modNm fp "hi")
                  )
-         ;  when (GetMeta_Core `elem` gm)
-                 (tm opts ecu ecuStoreCoreTime      (fpathSetSuff Cfg.suffixDotlessBinaryCore fp))
-         ;  when (GetMeta_CoreRun `elem` gm)
-                 (tm opts ecu ecuStoreCoreRunTime   (fpathSetSuff Cfg.suffixDotlessBinaryCoreRun fp))
+         ;  when (GetMeta_Core `elem` gm) $
+                 -- tm opts ecu ecuStoreCoreTime      (fpathSetSuff Cfg.suffixDotlessBinaryCore fp)
+                 dfltPrev ASTType_Core modNm ecu
+         ;  when (GetMeta_CoreRun `elem` gm) $
+                 -- tm opts ecu ecuStoreCoreRunTime   (fpathSetSuff Cfg.suffixDotlessBinaryCoreRun fp)
+                 dfltPrev ASTType_CoreRun modNm ecu
          ;  when (GetMeta_Dir `elem` gm)
                  (wr opts ecu ecuStoreDirIsWritable (                         fp     ))
          }
-  where tm :: EHCCompileRunner m => EHCOpts -> EHCompileUnit -> (ClockTime -> EHCompileUnit -> EHCompileUnit) -> FPath -> EHCompilePhaseT m ()
+  where dfltPrev astty modNm ecu = void $ bcall $ ModfTimeOfFile modNm astty (ASTFileContent_Binary, ASTFileUse_Cache) ASTFileTiming_Prev
+
+        tm :: EHCCompileRunner m => EHCOpts -> EHCompileUnit -> (ClockTime -> EHCompileUnit -> EHCompileUnit) -> FPath -> EHCompilePhaseT m ()
         tm opts ecu store fp
           = do { let n = fpathToStr fp
                ; nExists <- liftIO $ doesFileExist n
@@ -197,23 +198,23 @@
                ; cpUpdCU modNm $ store (writable pm)
                }
 
-{-# LINE 270 "src/ehc/EHC/CompilePhase/Module.chs" #-}
+{-# LINE 269 "src/ehc/EHC/CompilePhase/Module.chs" #-}
 cpGetDummyCheckSrcMod :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpGetDummyCheckSrcMod modNm
   = do { cr <- get
-       ; let crsi   = crStateInfo cr
+       ; let crsi   = _crStateInfo cr
              mm     = crsiModMp crsi
              mod    = Mod modNm Nothing Nothing [] Rel.empty Rel.empty []
        ; cpUpdCU modNm (ecuStoreMod mod)
        ; cpUpdSI (\crsi -> crsi {crsiModMp = Map.insert modNm emptyModMpInfo mm})
        }
 
-{-# LINE 286 "src/ehc/EHC/CompilePhase/Module.chs" #-}
+{-# LINE 285 "src/ehc/EHC/CompilePhase/Module.chs" #-}
 cpUpdateModOffMp :: EHCCompileRunner m => [HsName] -> EHCompilePhaseT m ()
 cpUpdateModOffMp modNmL@(modNm:_)
   = do { cr <- get
        ; cpMsg modNm VerboseDebug "cpUpdateModOffMp"
-       ; let crsi   = crStateInfo cr
+       ; let crsi   = _crStateInfo cr
              offMp  = crsiModOffMp crsi
              (offMp',_)
                     = foldr add (offMp, Map.size offMp) modNmL
@@ -226,7 +227,7 @@
        ; cpUpdSI (\crsi -> crsi {crsiModOffMp = offMp'})
        }
 
-{-# LINE 309 "src/ehc/EHC/CompilePhase/Module.chs" #-}
+{-# LINE 308 "src/ehc/EHC/CompilePhase/Module.chs" #-}
 -- | Compute imported module names
 cpGenImpNmInfo :: EHCCompileRunner m => HsName -> EHCompilePhaseT m [HsName]
 cpGenImpNmInfo modNm
@@ -238,7 +239,7 @@
        ; return impNmL
        }
 
-{-# LINE 326 "src/ehc/EHC/CompilePhase/Module.chs" #-}
+{-# LINE 325 "src/ehc/EHC/CompilePhase/Module.chs" #-}
 cpUpdHiddenExports :: EHCCompileRunner m => HsName -> [(HsName,IdOccKind)] -> EHCompilePhaseT m ()
 cpUpdHiddenExports modNm exps
   = when (not $ null exps)
diff --git a/src/UHC/Light/Compiler/EHC/CompilePhase/Output.hs b/src/UHC/Light/Compiler/EHC/CompilePhase/Output.hs
--- a/src/UHC/Light/Compiler/EHC/CompilePhase/Output.hs
+++ b/src/UHC/Light/Compiler/EHC/CompilePhase/Output.hs
@@ -1,25 +1,22 @@
 module UHC.Light.Compiler.EHC.CompilePhase.Output
-( CPOutputCoreHow (..), cpOutputCoreModules
+( cpOutputSomeModules
+, cpOutputSomeModule
 , cpOutputCore
-, CPOutputCoreRunHow (..), cpOutputCoreRunModules
-, cpOutputCoreRun
 , cpOutputHI )
 where
+import UHC.Util.Lens
 import qualified UHC.Util.FastSeq as Seq
 import qualified Data.Map as Map
 import qualified Data.Set as Set
 import Control.Monad.State
+import UHC.Util.Lens
 import UHC.Light.Compiler.EHC.Common
 import UHC.Light.Compiler.EHC.CompileUnit
 import UHC.Light.Compiler.EHC.CompileRun
 import qualified UHC.Light.Compiler.Config as Cfg
+import UHC.Light.Compiler.EHC.ASTHandler.Instances
 import qualified UHC.Light.Compiler.Core.ToGrin as Core2GrSem
 import UHC.Light.Compiler.Core.Trf.EraseExtractTysigCore
-import UHC.Light.Compiler.CoreRun as CoreRun
-import UHC.Light.Compiler.Core.ToCoreRun
-import UHC.Light.Compiler.CoreRun.Pretty
-import UHC.Light.Compiler.Core as Core
-import UHC.Light.Compiler.Core.Pretty
 import UHC.Util.Time
 import System.Directory
 import qualified UHC.Light.Compiler.SourceCodeSig as Sig
@@ -41,114 +38,62 @@
 
 
 
-
-{-# LINE 93 "src/ehc/EHC/CompilePhase/Output.chs" #-}
--- | Abstraction for writing a module to output with variation in suffices
+{-# LINE 107 "src/ehc/EHC/CompilePhase/Output.chs" #-}
+-- | Abstraction for writing some module to output with variation in suffices
 cpOutputSomeModules
-  ::    EHCCompileRunner m =>
-        (EHCOpts -> EHCompileUnit -> FPath -> FilePath -> mod -> IO ())
-     -> (EHCOpts -> HsName -> FPath -> String -> FPath)
+  :: EHCCompileRunner m
+     => ASTHandler' mod -- (EHCOpts -> EHCompileUnit -> FPath -> FilePath -> mod -> IO Bool)
+     -> ASTFileContent
      -> (Int -> String -> String)
      -> String
      -> HsName
      -> [(String,mod)]
-     -> EHCompilePhaseT m [FPath]
-cpOutputSomeModules write mkfp mknmsuff suff modNm mods = do
+     -> EHCompilePhaseT m [Maybe FPath]
+cpOutputSomeModules astHdlr how mknmsuff suff modNm mods = do
     cr <- get
     let  (ecu,crsi,opts,fp) = crBaseInfo modNm cr
     forM (zip [1..] mods) $ \(nr,(nmsuff,mod)) -> do
-      let fpC     = mkfp opts modNm fp (suff ++ mknmsuff nr nmsuff) -- for now nmsuff after suff, but should be inside name
+      let fpC     = _asthdlrMkOutputFPath astHdlr opts modNm fp (suff ++ mknmsuff nr nmsuff) -- for now nmsuff after suff, but should be inside name
           fnC     = fpathToStr fpC
-      liftIO $ unless (ecuSrcHasSuffix suff ecu) $ do
-        fpathEnsureExists fpC
-        write opts ecu fpC fnC mod
-      return fpC
-
-{-# LINE 152 "src/ehc/EHC/CompilePhase/Output.chs" #-}
-data CPOutputCoreHow
-  = CPOutputCoreHow_Text
-  | CPOutputCoreHow_Binary
-  | CPOutputCoreHow_CoreRun_Text
-  | CPOutputCoreHow_CoreRun_Binary
-
-cpOutputCoreModules
-  :: EHCCompileRunner m =>
-        CPOutputCoreHow -> [CoreOpt]
-     -> (Int -> String -> String)
-     -> String -> HsName
-     -> [(String,CModule)]
-     -> EHCompilePhaseT m [FPath]
-cpOutputCoreModules how coreOpts mknmsuff suff modNm cMods
-  = do { cr <- get
-       ; let (_,opts) = crBaseInfo' cr
-       ; cpOutputSomeModules write mkOutputFPath mknmsuff suff modNm cMods
-       }
-  where write opts _ fpC fnC cMod = case how of
-          CPOutputCoreHow_Text -> do
-            let cMod' = cmodTrfEraseTyCore opts cMod
-            putPPFPath fpC (ppCModule (opts {ehcOptCoreOpts = coreOpts ++ ehcOptCoreOpts opts}) cMod') 100
-          CPOutputCoreHow_Binary ->
-            putSerializeFile fnC cMod
-          CPOutputCoreHow_CoreRun_Text -> do
-            let cMod' = cmod2CoreRun cMod
-            putPPFPath fpC (ppMod' opts cMod') 100
-          CPOutputCoreHow_CoreRun_Binary -> do
-            let cMod' = cmod2CoreRun cMod
-            putSerializeFile fnC cMod'
+      okWrite <- if ecuSrcHasSuffix suff ecu
+        then return False
+        else liftIO $ do
+          -- fpathEnsureExists fpC
+          asthdlrOutputIO astHdlr how opts ecu modNm fpC fnC mod
+      return $ if okWrite then Just fpC else Nothing
 
-{-# LINE 197 "src/ehc/EHC/CompilePhase/Output.chs" #-}
-cpOutputCore :: EHCCompileRunner m => CPOutputCoreHow -> [CoreOpt] -> String -> String -> HsName -> EHCompilePhaseT m FPath
-cpOutputCore how coreOpts nmsuff suff modNm
+{-# LINE 132 "src/ehc/EHC/CompilePhase/Output.chs" #-}
+-- | Abstraction for writing a module, using cpOutputSomeModules
+cpOutputSomeModule
+  :: EHCCompileRunner m
+     => (EHCompileUnit -> mod)
+     -> ASTHandler' mod
+     -> ASTFileContent
+     -> String
+     -> String
+     -> HsName
+     -> EHCompilePhaseT m (Maybe FPath)
+cpOutputSomeModule getMod astHdlr how nmsuff suff modNm
   =  do  {  cr <- get
          ;  let  (ecu,_,_,_) = crBaseInfo modNm cr
-                 mbCore = ecuMbCore ecu
-                 cMod   = panicJust "cpOutputCore" mbCore
-         ;  cpMsg modNm VerboseALot "Emit Core"
-         ;  fmap head $ cpOutputCoreModules how coreOpts (\_ nm -> nm) suff modNm [(nmsuff,cMod)]
+                 mod    = getMod ecu
+         ;  cpMsg modNm VerboseALot $ "Emit " ++ _asthdlrName astHdlr
+         ;  fmap head $ cpOutputSomeModules astHdlr how (\_ nm -> nm) suff modNm [(nmsuff,mod)]
          }
 
-{-# LINE 209 "src/ehc/EHC/CompilePhase/Output.chs" #-}
-data CPOutputCoreRunHow
-  = CPOutputCoreRunHow_Text
-  | CPOutputCoreRunHow_Binary
-
-cpOutputCoreRunModules
-  :: EHCCompileRunner m =>
-        CPOutputCoreRunHow
-     -> (Int -> String -> String)
-     -> String -> HsName
-     -> [(String,CoreRun.Mod)]
-     -> EHCompilePhaseT m [FPath]
-cpOutputCoreRunModules how mknmsuff suff modNm crMods
-  = do { cr <- get
-       ; let (_,opts) = crBaseInfo' cr
-       ; cpOutputSomeModules write mkOutputFPath mknmsuff suff modNm crMods
-       }
-  where write opts _ fpC fnC crMod = case how of
-          CPOutputCoreRunHow_Text ->
-            putPPFPath fpC (ppMod' opts crMod) 100
-          CPOutputCoreRunHow_Binary ->
-            putSerializeFile fnC crMod
-
-
-{-# LINE 238 "src/ehc/EHC/CompilePhase/Output.chs" #-}
-cpOutputCoreRun :: EHCCompileRunner m => CPOutputCoreRunHow -> String -> String -> HsName -> EHCompilePhaseT m FPath
-cpOutputCoreRun how nmsuff suff modNm
-  =  do  {  cr <- get
-         ;  let  (ecu,_,_,_) = crBaseInfo modNm cr
-                 mbCoreRun = ecuMbCoreRun ecu
-                 cMod   = panicJust "cpOutputCoreRun" mbCoreRun
-         ;  cpMsg modNm VerboseALot "Emit CoreRun"
-         ;  fmap head $ cpOutputCoreRunModules how (\_ nm -> nm) suff modNm [(nmsuff,cMod)]
-         }
+{-# LINE 188 "src/ehc/EHC/CompilePhase/Output.chs" #-}
+cpOutputCore :: EHCCompileRunner m => ASTFileContent -> String -> String -> HsName -> EHCompilePhaseT m FPath
+cpOutputCore how nmsuff suff modNm =
+    fmap (panicJust "cpOutputGrin.cpOutputSomeModule") $
+      cpOutputSomeModule (^. ecuCore) astHandler'_Core how nmsuff suff modNm
 
-{-# LINE 381 "src/ehc/EHC/CompilePhase/Output.chs" #-}
+{-# LINE 254 "src/ehc/EHC/CompilePhase/Output.chs" #-}
 cpOutputHI :: EHCCompileRunner m => String -> HsName -> EHCompilePhaseT m ()
 cpOutputHI suff modNm
   =  do  {  cr <- get
          ;  let  (ecu,crsi,opts,fp) = crBaseInfo modNm cr
                  mmi    = panicJust "cpOutputHI.crsiModMp" $ Map.lookup modNm $ crsiModMp crsi
-                 hii1   = ecuHIInfo ecu
+                 hii1   = ecu ^. ecuHIInfo
                  impNmS = ecuImpNmS ecu
                  hii2   = hii1 { HI.hiiValidity             = HI.HIValidity_Ok
                                , HI.hiiModuleNm             = modNm
@@ -182,12 +127,15 @@
                  (liftIO $ removeFile fnH)
          ;  when (ehcOptVerbosity opts > VerboseALot)
                  (do { liftIO $ putPPLn ("hii3: " >#< hii3)
-                     ; liftIO $ putPPLn ("orph: " >#< vlist [ m >#< (fmap Set.toList $ HI.hiiMbOrphan $ ecuHIInfo me) | m <- Set.toList impNmS, let me = crCU m cr ])
+                     ; liftIO $ putPPLn ("orph: " >#< vlist [ m >#< (fmap Set.toList $ HI.hiiMbOrphan $ me ^. ecuHIInfo) | m <- Set.toList impNmS, let me = crCU m cr ])
                      ; liftIO $ putPPLn ("used nms: " >#< (pp $ show $ ecuUsedNames ecu))
                      })
+{-
          ;  liftIO $ do { fpathEnsureExists fpH
-                      ; putSerializeFile fnH hii3
-                      }
+                        ; putSerializeFile fnH hii3
+                        }
+-}
+         ;  liftIO $ asthdlrOutputIO astHandler'_HI ASTFileContent_Binary opts ecu modNm fpH fnH hii3
          ;  now <- liftIO $ getClockTime
          ;  cpUpdCU modNm ( ecuStoreHIInfoTime now
                           . ecuStoreHIInfo hii3
diff --git a/src/UHC/Light/Compiler/EHC/CompilePhase/Parsers.hs b/src/UHC/Light/Compiler/EHC/CompilePhase/Parsers.hs
--- a/src/UHC/Light/Compiler/EHC/CompilePhase/Parsers.hs
+++ b/src/UHC/Light/Compiler/EHC/CompilePhase/Parsers.hs
@@ -1,9 +1,8 @@
 module UHC.Light.Compiler.EHC.CompilePhase.Parsers
-( cpParseOffside
-, cpParseEH
+( cpParseEH
 , cpParseCoreWithFPath
-, cpParseOffsideStopAtErr
-, cpDecodeHIInfo
+, cpParseCoreRunWithFPath
+, cpDecode''
 , cpDecodeCore
 , cpDecodeCoreRun
 , cpGetPrevHI
@@ -12,15 +11,20 @@
 , cpParseHs
 , cpParseHsImport )
 where
+import UHC.Light.Compiler.Base.ParseUtils
 import UU.Parsing
 import UU.Parsing.Offside
 import qualified UHC.Util.ScanUtils as ScanUtils
 import UHC.Light.Compiler.Scanner.Common
 import UHC.Util.ParseUtils
+import UHC.Util.Lens
+import Control.Monad.Error
 import Control.Monad.State
+import qualified Data.Map as Map
 import UHC.Light.Compiler.EHC.Common
 import UHC.Light.Compiler.EHC.CompileUnit
 import UHC.Light.Compiler.EHC.CompileRun
+import UHC.Light.Compiler.EHC.ASTHandler.Instances
 import qualified UHC.Light.Compiler.EH as EH
 import qualified UHC.Light.Compiler.EH.Parser as EHPrs
 import qualified UHC.Light.Compiler.HS as HS
@@ -28,12 +32,12 @@
 import qualified UHC.Light.Compiler.Core as Core
 import qualified UHC.Light.Compiler.Core.Parser as CorePrs
 import qualified UHC.Light.Compiler.CoreRun as CoreRun
+import Control.Exception as CE
 import qualified UHC.Light.Compiler.HI as HI
 import qualified UHC.Util.Binary as Bin
 import UHC.Util.Serialize
 import qualified UHC.Light.Compiler.Config as Cfg
 import qualified UHC.Light.Compiler.SourceCodeSig as Sig
-import Control.Exception as CE
 
 
 
@@ -42,126 +46,66 @@
 
 
 
-{-# LINE 64 "src/ehc/EHC/CompilePhase/Parsers.chs" #-}
+{-# LINE 77 "src/ehc/EHC/CompilePhase/Parsers.chs" #-}
 -- | Generalization of parser invocation
 cpParseWithFPath
-  :: (EHCCompileRunner m, PP msg)
-     => (ScanUtils.ScanOpts -> FilePath -> Handle -> IO inp)			-- tokenize/scan file
-     -> (parser -> inp -> (a,[msg]))									-- parse tokens
-     -> ([Err] -> EHCompilePhaseT m out)									-- monadic output from errors
-     -> parser															-- the parser
-     -> ScanUtils.ScanOpts												-- options to the tokenizer/scanner
-     -> EcuUpdater a													-- updater of state
+  :: ( EHCCompileRunner m
+     )
+     => ASTHandler' a
+     -> EHParseOpts
      -> Maybe FPath														-- possibly overriding FilePath instead of default derived from state for this module name
      -> HsName															-- module name
-     -> EHCompilePhaseT m out
+     -> EHCompilePhaseT m ()
 cpParseWithFPath
-      scan parse seterrs
-      parser scanOpts store mbFp modNm
+      astHdlr popts mbFp modNm
  = do { cr <- get
-      ; (fn,fh) <- liftIO $ openFPath (maybe (ecuFilePath (crCU modNm cr)) id mbFp) ReadMode False
-      ; tokens  <- liftIO $ scan scanOpts fn fh
-      ; let (res,msgs) = parse parser tokens
-            errs       = map (rngLift emptyRange mkPPErr) msgs
-      ; cpUpdCU modNm (store res)
-      ; seterrs errs
+      ; let (_,opts) 	= crBaseInfo' cr
+            sopts    	= _asthdlrParseScanOpts astHdlr opts popts
+            description = "Parse (" ++ (if ScanUtils.scoLitmode sopts then "Literate " else "") ++ _asthdlrName astHdlr ++ " syntax) of module `" ++ show modNm ++ "`"
+            seterrs 	= cpSetLimitErrsWhen 5 description
+      ; case _asthdlrParser astHdlr opts popts of
+          Just (ASTParser p) -> do
+               (res,errs) <- parseWithFPath sopts popts p (maybe (ecuFilePath (crCU modNm cr)) id mbFp)
+               cpUpdCU modNm (_asthdlrEcuStore astHdlr res)
+               unless (ehpoptsStopAtErr popts) $ seterrs errs
+          _ -> seterrs [strMsg $ "No parser for " ++ _asthdlrName astHdlr]
       }
 
--- cpParseOffsideWithFPath :: HSPrs.HSParser a -> ScanUtils.ScanOpts -> EcuUpdater a -> String -> Maybe FPath -> HsName -> EHCompilePhase ()
--- `HSPrs.HSParser a' is a type synonym for `OffsideParser [Token] Pair Token (Maybe Token) a' but is not expanded as such...
-cpParseOffsideWithFPath :: EHCCompileRunner m => OffsideParser [Token] Pair Token (Maybe Token) a -> ScanUtils.ScanOpts -> EcuUpdater a -> String -> Maybe FPath -> HsName -> EHCompilePhaseT m ()
-cpParseOffsideWithFPath parser scanOpts store description mbFp modNm
-  = cpParseWithFPath offsideScanHandle parseOffsideToResMsgs (cpSetLimitErrsWhen 5 description) parser scanOpts store mbFp modNm
-{-
- = do { cr <- get
-      ; (fn,fh) <- liftIO $ openFPath (maybe (ecuFilePath (crCU modNm cr)) id mbFp) ReadMode False
-      ; tokens  <- liftIO $ offsideScanHandle scanOpts fn fh
-      -- ; liftIO $ putStrLn $ show tokens -- does not work, no Show instance
-      ; let (res,msgs) = parseOffsideToResMsgs parser tokens
-            errs       = map (rngLift emptyRange mkPPErr) msgs
-      ; cpUpdCU modNm (store res)
-      ; cpSetLimitErrsWhen 5 description errs
-      }
--}
-
-{-# LINE 107 "src/ehc/EHC/CompilePhase/Parsers.chs" #-}
-cpParseOffside :: EHCCompileRunner m => HSPrs.HSParser a -> ScanUtils.ScanOpts -> EcuUpdater a -> String -> HsName -> EHCompilePhaseT m ()
-cpParseOffside parser scanOpts store description modNm
- = cpParseOffsideWithFPath parser scanOpts store description Nothing modNm
-
-{-# LINE 138 "src/ehc/EHC/CompilePhase/Parsers.chs" #-}
+{-# LINE 103 "src/ehc/EHC/CompilePhase/Parsers.chs" #-}
 cpParseEH :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
-cpParseEH
-  = cpParseOffside EHPrs.pAGItf (ehScanOpts defaultEHCOpts) ecuStoreEH "Parse (EH syntax) of module"
+cpParseEH modNm
+  = cpParseWithFPath astHandler'_EH defaultEHParseOpts Nothing modNm
 
-{-# LINE 165 "src/ehc/EHC/CompilePhase/Parsers.chs" #-}
+{-# LINE 126 "src/ehc/EHC/CompilePhase/Parsers.chs" #-}
 cpParseHs :: EHCCompileRunner m => Bool -> HsName -> EHCompilePhaseT m ()
-cpParseHs litmode modNm
-  = do { cr <- get
-       ; let  (ecu,_,opts,_) = crBaseInfo modNm cr
-       ; cpParseOffsideWithFPath
-           (HSPrs.pAGItf opts) ((hsScanOpts opts) {ScanUtils.scoLitmode = litmode}) ecuStoreHS
-           ("Parse (" ++ (if litmode then "Literate " else "") ++ "Haskell syntax) of module")
-           Nothing modNm
-       }
-
-{-# LINE 177 "src/ehc/EHC/CompilePhase/Parsers.chs" #-}
-cpParseOffsideStopAtErr :: EHCCompileRunner m => HSPrs.HSParser a -> ScanUtils.ScanOpts -> EcuUpdater a -> HsName -> EHCompilePhaseT m ()
-cpParseOffsideStopAtErr parser scanOpts store modNm
- = do { cr <- get
-      ; (fn,fh) <- liftIO $ openFPath (ecuFilePath (crCU modNm cr)) ReadMode False
-      ; tokens  <- liftIO $ offsideScanHandle scanOpts fn fh
-      ; let (res,_) = parseOffsideToResMsgsStopAtErr parser tokens
-      ; cpUpdCU modNm (store res)
-      }
+cpParseHs litmode = cpParseWithFPath astHandler'_HS (defaultEHParseOpts {ehpoptsLitMode=litmode}) Nothing
 
-{-# LINE 197 "src/ehc/EHC/CompilePhase/Parsers.chs" #-}
+{-# LINE 136 "src/ehc/EHC/CompilePhase/Parsers.chs" #-}
 cpParseHsImport :: EHCCompileRunner m => Bool -> HsName -> EHCompilePhaseT m ()
-cpParseHsImport litmode modNm
-  = do { cr <- get
-       ; let (_,opts) = crBaseInfo' cr
-       ; cpParseOffsideStopAtErr (HSPrs.pAGItfImport opts) ((hsScanOpts opts) {ScanUtils.scoLitmode = litmode}) ecuStoreHS modNm
-       }
+cpParseHsImport litmode = cpParseWithFPath astHandler'_HS (defaultEHParseOpts {ehpoptsStopAtErr=True, ehpoptsLitMode=litmode, ehpoptsForImport=True}) Nothing
 
-{-# LINE 206 "src/ehc/EHC/CompilePhase/Parsers.chs" #-}
+{-# LINE 141 "src/ehc/EHC/CompilePhase/Parsers.chs" #-}
 cpParseCoreWithFPath :: EHCCompileRunner m => Maybe FPath -> HsName -> EHCompilePhaseT m ()
-cpParseCoreWithFPath mbFp modNm
-  = do (_,opts) <- gets crBaseInfo'
-       cpParseWithFPath scanHandle parseToResMsgs (cpSetLimitErrsWhen 5 "Parse Core") CorePrs.pCModule (coreScanOpts opts) ecuStoreCore mbFp modNm
+cpParseCoreWithFPath = cpParseWithFPath astHandler'_Core (defaultEHParseOpts)
 
-{-
-cpParseCore :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
-cpParseCore modNm
-  = do { cr <- get
-       ; let  (ecu,_,opts,fp) = crBaseInfo modNm cr
-              fpC     = fpathSetSuff Cfg.suffixDotlessInputOutputTextualCore fp
-       ; cpMsg' modNm VerboseALot "Parsing" Nothing fpC
-       ; errs <- cpParsePlainToErrs CorePrs.pCModule (coreScanOpts opts) ecuStoreCore fpC modNm
-       ; when (ehcDebugStopAtCoreError opts)
-              (cpSetLimitErrsWhen 5 "Parse Core (of previous compile) of module" errs)
-       ; return ()
-       }
--}
+{-# LINE 146 "src/ehc/EHC/CompilePhase/Parsers.chs" #-}
+cpParseCoreRunWithFPath :: EHCCompileRunner m => Maybe FPath -> HsName -> EHCompilePhaseT m ()
+cpParseCoreRunWithFPath = cpParseWithFPath astHandler'_CoreRun (defaultEHParseOpts)
 
-{-# LINE 251 "src/ehc/EHC/CompilePhase/Parsers.chs" #-}
+{-# LINE 155 "src/ehc/EHC/CompilePhase/Parsers.chs" #-}
 cpDecodeHIInfo :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpDecodeHIInfo modNm
   = do { cr <- get
        ; let  (ecu,_,opts,fp) = crBaseInfo modNm cr
-              -- if outputdir is specified, use that location to possibly read hi from.
-              fpH     = mkInOrOutputFPathFor (InputFrom_Loc $ ecuFileLocation ecu) opts modNm fp "hi"
+              fpH     = asthdlrMkInputFPath astHandler'_HI opts ecu (ASTFileContent_Binary, ASTFileUse_Cache) modNm fp
        ; cpMsg' modNm VerboseALot "Decoding" Nothing fpH
        ; hiinfo <- liftIO $
-           CE.catch (do { i <- getSGetFile (fpathToStr fpH) (HI.sgetHIInfo opts)
-                               -- getSerializeFile (fpathToStr fpH)
-                               -- Bin.getBinaryFPath fpH
-                        ; return i
-                        })
+           CE.catch (getSGetFile (fpathToStr fpH) (HI.sgetHIInfo opts))
                     (\(_ :: SomeException) -> return $ HI.emptyHIInfo {HI.hiiValidity = HI.HIValidity_Absent})
        ; when (ehcOptVerbosity opts > VerboseALot)
               (do { liftIO $ putPPLn (pp hiinfo)
                   })
-       ; let canCompile = crModCanCompile modNm cr
+       ; let canCompile = ecuCanCompile ecu
        ; case HI.hiiValidity hiinfo of
            HI.HIValidity_WrongMagic | not canCompile
              -> cpSetLimitErrsWhen 1 "Read HI"
@@ -180,27 +124,62 @@
            _ -> cpUpdCU modNm (ecuStorePrevHIInfo {-- $ HI.hiiPostCheckValidity opts -} hiinfo)
        }
 
-{-# LINE 297 "src/ehc/EHC/CompilePhase/Parsers.chs" #-}
+{-# LINE 192 "src/ehc/EHC/CompilePhase/Parsers.chs" #-}
 -- | Decode from serialized file and store result in the compileunit for the module modNm
 cpDecode :: (EHCCompileRunner m, Serialize x) => Maybe String -> EcuUpdater x -> HsName -> EHCompilePhaseT m ()
 cpDecode mbSuff store modNm
   = do { cr <- get
        ; let  (ecu,_,opts,fp) = crBaseInfo modNm cr
               fpC     = maybe id fpathSetSuff mbSuff fp
-       ; cpMsg' modNm VerboseALot "Decoding" Nothing fpC
+       ; cpMsg' modNm VerboseALot ("Decoding (" ++ show mbSuff ++ ")") Nothing fpC
        ; x <- liftIO $ getSerializeFile (fpathToStr fpC)
        ; cpUpdCU modNm (store x)
        }
 
-{-# LINE 315 "src/ehc/EHC/CompilePhase/Parsers.chs" #-}
+{-# LINE 205 "src/ehc/EHC/CompilePhase/Parsers.chs" #-}
+-- | Decode from serialized file and store result in the compileunit for the module modNm, return True if decoding could be done
+cpDecode'' :: EHCCompileRunner m => ASTHandler' ast -> ASTSuffixKey -> ASTFileTiming -> HsName -> EHCompilePhaseT m Bool
+cpDecode'' astHdlr skey tkey modNm
+  = do { cr <- get
+       ; let (ecu,_,opts,fp)    = crBaseInfo modNm cr
+             mbi@(~(Just info)) = astsuffixLookup skey $ _asthdlrSuffixRel astHdlr
+             mbl@(~(Just lens)) = Map.lookup tkey $ _astsuffinfoASTLensMp info
+             -- fpC                = fpathSetSuff (_astsuffinfoSuff info) fp
+             fpC                = asthdlrMkInputFPath astHdlr opts ecu skey modNm fp
+       ; if isJust mbi && isJust mbl
+         then do
+           cpMsg' modNm VerboseALot "Decoding" Nothing fpC
+           mbx@(~(Just x)) <- liftIO $ _asthdlrGetSerializeFileIO astHdlr opts fpC
+           if isJust mbx
+             then do
+               let errs = _asthdlrPostInputCheck astHdlr opts ecu modNm fpC x
+               if null errs
+                 then do
+                   cpUpdCU modNm (lens ^= Just x)
+                   return True
+                 else do
+                   cpSetLimitErrsWhen 1 ("Decode " ++ _asthdlrName astHdlr) errs
+                   return False
+             else return False
+         else return False
+       }
+
+-- | Decode from serialized file and store result in the compileunit for the module modNm
+cpDecode' :: EHCCompileRunner m => ASTHandler' ast -> ASTSuffixKey -> ASTFileTiming -> HsName -> EHCompilePhaseT m ()
+cpDecode' astHdlr skey tkey modNm = do
+    okDecode <- cpDecode'' astHdlr skey tkey modNm
+    unless okDecode $ cpSetLimitErrsWhen 1 ("Decode " ++ _asthdlrName astHdlr) [strMsg $ "No decoder/lens for " ++ _asthdlrName astHdlr ++ " (" ++ show skey ++ "/" ++ show tkey ++ ")"]
+
+{-# LINE 245 "src/ehc/EHC/CompilePhase/Parsers.chs" #-}
 cpDecodeCore :: EHCCompileRunner m => Maybe String -> HsName -> EHCompilePhaseT m ()
+-- cpDecodeCore = cpDecode' astHdlr skey timing
 cpDecodeCore suff = cpDecode suff ecuStoreCore
 
-{-# LINE 320 "src/ehc/EHC/CompilePhase/Parsers.chs" #-}
+{-# LINE 251 "src/ehc/EHC/CompilePhase/Parsers.chs" #-}
 cpDecodeCoreRun :: EHCCompileRunner m => Maybe String -> HsName -> EHCompilePhaseT m ()
 cpDecodeCoreRun suff = cpDecode suff ecuStoreCore
 
-{-# LINE 329 "src/ehc/EHC/CompilePhase/Parsers.chs" #-}
+{-# LINE 260 "src/ehc/EHC/CompilePhase/Parsers.chs" #-}
 cpGetPrevHI :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpGetPrevHI modNm
   = do { cr <- get
@@ -208,30 +187,31 @@
        ; let  ecu        = crCU modNm cr
        -- ; when (isJust (ecuMbHITime ecu))
        --        (cpParseHI modNm)
-       ; when (isJust (ecuMbHIInfoTime ecu))
-              (cpDecodeHIInfo modNm)
+       ; when (isJust (_ecuMbHIInfoTime ecu)) $
+              -- cpDecodeHIInfo modNm
+              cpDecode' astHandler'_HI (ASTFileContent_Binary, ASTFileUse_Cache) ASTFileTiming_Prev modNm
        }
 
-{-# LINE 342 "src/ehc/EHC/CompilePhase/Parsers.chs" #-}
+{-# LINE 274 "src/ehc/EHC/CompilePhase/Parsers.chs" #-}
 cpGetPrevCore :: EHCCompileRunner m => HsName -> EHCompilePhaseT m Core.CModule
 cpGetPrevCore modNm
   = do { cr <- get
        ; cpMsg modNm VerboseDebug "cpGetPrevCore"
        ; let  ecu    = crCU modNm cr
-       ; when (isJust (ecuMbCoreTime ecu) && isNothing (ecuMbCore ecu))
-              (cpDecodeCore (Just Cfg.suffixDotlessBinaryCore) modNm)
-              -- (cpParseCore modNm)
-       ; fmap (fromJust . ecuMbCore) $ gets (crCU modNm)
+       ; when (isJust (_ecuMbCoreTime ecu) && isNothing (_ecuMbCore ecu)) $
+              -- cpDecodeCore (Just Cfg.suffixDotlessBinaryCore) modNm
+              cpDecode' astHandler'_Core (ASTFileContent_Binary, ASTFileUse_Cache) ASTFileTiming_Prev modNm
+       ; fmap (fromJust . _ecuMbCore) $ gets (crCU modNm)
        }
 
-{-# LINE 355 "src/ehc/EHC/CompilePhase/Parsers.chs" #-}
+{-# LINE 287 "src/ehc/EHC/CompilePhase/Parsers.chs" #-}
 cpGetPrevCoreRun :: EHCCompileRunner m => HsName -> EHCompilePhaseT m CoreRun.Mod
 cpGetPrevCoreRun modNm
   = do { cr <- get
        ; cpMsg modNm VerboseDebug "cpGetPrevCoreRun"
        ; let  ecu    = crCU modNm cr
-       ; when (isJust (ecuMbCoreRunTime ecu) && isNothing (ecuMbCoreRun ecu))
+       ; when (isJust (_ecuMbCoreRunTime ecu) && isNothing (_ecuMbCoreRun ecu))
               (cpDecodeCoreRun (Just Cfg.suffixDotlessBinaryCoreRun) modNm)
-       ; fmap (fromJust . ecuMbCoreRun) $ gets (crCU modNm)
+       ; fmap (fromJust . _ecuMbCoreRun) $ gets (crCU modNm)
        }
 
diff --git a/src/UHC/Light/Compiler/EHC/CompilePhase/Run.hs b/src/UHC/Light/Compiler/EHC/CompilePhase/Run.hs
--- a/src/UHC/Light/Compiler/EHC/CompilePhase/Run.hs
+++ b/src/UHC/Light/Compiler/EHC/CompilePhase/Run.hs
@@ -22,7 +22,7 @@
 cpRunCoreRun modNm = do
     cr <- get
     let (ecu,_,opts,_) = crBaseInfo modNm cr
-        mbCore = ecuMbCore ecu
+        mbCore = _ecuMbCore ecu
     cpMsg modNm VerboseNormal "Run Core"
     when (isJust mbCore) $ do
       let mod = cmod2CoreRun $ fromJust mbCore
@@ -40,10 +40,10 @@
 cpRunCoreRun2 modNm = do
     cr <- get
     let (ecu,_,opts,_) = crBaseInfo modNm cr
-        mbCore = ecuMbCore ecu
+        mbCore = _ecuMbCore ecu
     let hasMain = ecuHasMain ecu
     (impModL, mainMod) <- fmap (fromJust . initlast) $
-      case crPartitionMainAndImported cr $ map head $ crCompileOrder cr of
+      case crPartitionMainAndImported cr $ map head $ _crCompileOrder cr of
         (_, impl) -> do
           cores <- forM (impl ++ [modNm]) cpGetPrevCore
           return $ flip evalState emptyNm2RefMp $ do
@@ -66,10 +66,10 @@
 cpRunCoreRun3 modNm = do
     cr <- get
     let (ecu,_,opts,_) = crBaseInfo modNm cr
-        mbCore = ecuMbCore ecu
+        mbCore = _ecuMbCore ecu
     let hasMain = ecuHasMain ecu
     (impModL, mainMod) <- fmap (fromJust . initlast) $
-      case crPartitionMainAndImported cr $ map head $ crCompileOrder cr of
+      case crPartitionMainAndImported cr $ map head $ _crCompileOrder cr of
         (_, impl) -> do
           forM (impl ++ [modNm]) cpGetPrevCoreRun
     cpMsg modNm VerboseNormal "Run Core"
diff --git a/src/UHC/Light/Compiler/EHC/CompilePhase/Semantics.hs b/src/UHC/Light/Compiler/EHC/CompilePhase/Semantics.hs
--- a/src/UHC/Light/Compiler/EHC/CompilePhase/Semantics.hs
+++ b/src/UHC/Light/Compiler/EHC/CompilePhase/Semantics.hs
@@ -8,6 +8,7 @@
 , cpFoldHsMod
 , cpFoldHIInfo )
 where
+import UHC.Util.Lens
 import Control.Monad.State
 import qualified Data.Map as Map
 import UHC.Light.Compiler.EHC.Common
@@ -41,17 +42,17 @@
 
 
 
-{-# LINE 70 "src/ehc/EHC/CompilePhase/Semantics.chs" #-}
+{-# LINE 72 "src/ehc/EHC/CompilePhase/Semantics.chs" #-}
 cpFoldCore2Grin :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpFoldCore2Grin modNm
   =  do  {  cr <- get
          ;  let  (ecu,crsi,opts,_) = crBaseInfo modNm cr
-                 mbCore   = ecuMbCore ecu
+                 mbCore   = _ecuMbCore ecu
                  core     = panicJust "cpFoldCore2Grin" mbCore
                  coreInh  = crsiCoreInh crsi
                  coreSem  = Core2GrSem.wrap_CodeAGItf
                               (Core2GrSem.sem_CodeAGItf (Core.CodeAGItf_AGItf core))
-                              (coreInh { Core2GrSem.gUniq_Inh_CodeAGItf                         = crsiHereUID crsi
+                              (coreInh { Core2GrSem.gUniq_Inh_CodeAGItf                         = crsi ^. crsiHereUID
                                        , Core2GrSem.opts_Inh_CodeAGItf                          = opts
                                        , Core2GrSem.importUsedModules_Inh_CodeAGItf             = ecuImportUsedModules ecu
                                        })
@@ -60,12 +61,12 @@
                                 ))
          }
 
-{-# LINE 92 "src/ehc/EHC/CompilePhase/Semantics.chs" #-}
+{-# LINE 94 "src/ehc/EHC/CompilePhase/Semantics.chs" #-}
 cpFoldCore2CoreRun :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpFoldCore2CoreRun modNm
   =  do  {  cr <- get
          ;  let  (ecu,crsi,opts,_) 		= crBaseInfo modNm cr
-                 mbCore   				= ecuMbCore ecu
+                 mbCore   				= _ecuMbCore ecu
                  hasMain  				= ecuHasMain ecu
                  core     				= panicJust "cpFoldCore2CoreRun" mbCore
                  core2RunInh			= crsiCore2RunInh crsi
@@ -80,17 +81,17 @@
                                )
          }
 
-{-# LINE 117 "src/ehc/EHC/CompilePhase/Semantics.chs" #-}
+{-# LINE 119 "src/ehc/EHC/CompilePhase/Semantics.chs" #-}
 cpFoldCoreRunMod :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpFoldCoreRunMod modNm
   =  do  {  cr <- get
          ;  let  (ecu,crsi,opts,_) = crBaseInfo modNm cr
-                 mbCoreRun= ecuMbCoreRun ecu
+                 mbCoreRun= _ecuMbCoreRun ecu
                  core     = panicJust "cpFoldCoreRunMod" mbCoreRun
                  inh      = CoreRun2ChkSem.Inh_AGItf
                                 { CoreRun2ChkSem.opts_Inh_AGItf = opts
                                 , CoreRun2ChkSem.moduleNm_Inh_AGItf = modNm
-                                -- , CoreRun2ChkSem.dataGam_Inh_AGItf = EHSem.dataGam_Inh_AGItf $ crsiEHInh crsi
+                                -- , CoreRun2ChkSem.dataGam_Inh_AGItf = EHSem.dataGam_Inh_AGItf $ _crsiEHInh crsi
                                 }
                  crrSem   = CoreRun2ChkSem.crmodCheck' inh core
                  hasMain  = CoreRun2ChkSem.hasMain_Syn_AGItf crrSem
@@ -103,17 +104,17 @@
                                 ))
          }
 
-{-# LINE 141 "src/ehc/EHC/CompilePhase/Semantics.chs" #-}
+{-# LINE 143 "src/ehc/EHC/CompilePhase/Semantics.chs" #-}
 cpFoldCoreMod :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpFoldCoreMod modNm
   =  do  {  cr <- get
          ;  let  (ecu,crsi,opts,_) = crBaseInfo modNm cr
-                 mbCore   = ecuMbCore ecu
+                 mbCore   = _ecuMbCore ecu
                  core     = panicJust "cpFoldCoreMod" mbCore
                  inh      = Core2ChkSem.Inh_CodeAGItf
                                 { Core2ChkSem.opts_Inh_CodeAGItf = opts
                                 , Core2ChkSem.moduleNm_Inh_CodeAGItf = modNm
-                                , Core2ChkSem.dataGam_Inh_CodeAGItf = EHSem.dataGam_Inh_AGItf $ crsiEHInh crsi
+                                , Core2ChkSem.dataGam_Inh_CodeAGItf = EHSem.dataGam_Inh_AGItf $ crsi ^. crsiEHInh
                                 }
                  coreSem  = Core2ChkSem.cmodCheck' inh core
                  hasMain  = Core2ChkSem.hasMain_Syn_CodeAGItf coreSem
@@ -126,17 +127,17 @@
                                 ))
          }
 
-{-# LINE 165 "src/ehc/EHC/CompilePhase/Semantics.chs" #-}
+{-# LINE 167 "src/ehc/EHC/CompilePhase/Semantics.chs" #-}
 cpFoldEH :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpFoldEH modNm
   =  do  {  cr <- get
          ;  mieimpl <- cpGenModuleImportExportImpl modNm
          ;  let  (ecu,crsi,opts,_) = crBaseInfo modNm cr
-                 mbEH   = ecuMbEH ecu
+                 mbEH   = _ecuMbEH ecu
                  ehSem  = EHSem.wrap_AGItf (EHSem.sem_AGItf $ panicJust "cpFoldEH" mbEH)
-                                           ((crsiEHInh crsi)
+                                           ((crsi ^. crsiEHInh)
                                                   { EHSem.moduleNm_Inh_AGItf         		= ecuModNm ecu
-                                                  , EHSem.gUniq_Inh_AGItf            		= crsiHereUID crsi
+                                                  , EHSem.gUniq_Inh_AGItf            		= crsi ^. crsiHereUID
                                                   , EHSem.opts_Inh_AGItf             		= opts
                                                   , EHSem.importUsedModules_Inh_AGItf		= ecuImportUsedModules ecu
                                                   , EHSem.moduleImportExportImpl_Inh_AGItf	= mieimpl
@@ -146,16 +147,16 @@
                  (cpUpdCU modNm $! ecuStoreEHSem $! ehSem)
          }
 
-{-# LINE 192 "src/ehc/EHC/CompilePhase/Semantics.chs" #-}
+{-# LINE 194 "src/ehc/EHC/CompilePhase/Semantics.chs" #-}
 cpFoldHs :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpFoldHs modNm
   =  do  {  cr <- get
          ;  let  (ecu,crsi,opts,_) = crBaseInfo modNm cr
-                 mbHS   = ecuMbHS ecu
-                 inh    = crsiHSInh crsi
+                 mbHS   = _ecuMbHS ecu
+                 inh    = crsi ^. crsiHSInh
                  hsSem  = HSSem.wrap_AGItf (HSSem.sem_AGItf $ panicJust "cpFoldHs" mbHS)
                                            (inh { HSSem.opts_Inh_AGItf             = opts
-                                                , HSSem.gUniq_Inh_AGItf            = crsiHereUID crsi
+                                                , HSSem.gUniq_Inh_AGItf            = crsi ^. crsiHereUID
                                                 , HSSem.moduleNm_Inh_AGItf         = modNm
                                                 , HSSem.isTopMod_Inh_AGItf         = ecuIsTopMod ecu
                                                 , HSSem.modInScope_Inh_AGItf       = inscps
@@ -182,15 +183,15 @@
                      })
          }
 
-{-# LINE 239 "src/ehc/EHC/CompilePhase/Semantics.chs" #-}
+{-# LINE 241 "src/ehc/EHC/CompilePhase/Semantics.chs" #-}
 cpFoldHsMod :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpFoldHsMod modNm
   =  do  {  cr <- get
          ;  let  (ecu,crsi,opts,_) = crBaseInfo modNm cr
-                 mbHS       = ecuMbHS ecu
+                 mbHS       = _ecuMbHS ecu
                  inh        = crsiHSModInh crsi
                  hsSemMod   = HSSemMod.wrap_AGItf (HSSemMod.sem_AGItf $ panicJust "cpFoldHsMod" mbHS)
-                                                  (inh { HSSemMod.gUniq_Inh_AGItf        = crsiHereUID crsi
+                                                  (inh { HSSemMod.gUniq_Inh_AGItf        = crsi ^. crsiHereUID
                                                        , HSSemMod.moduleNm_Inh_AGItf     = modNm
                                                        })
                  hasMain= HSSemMod.mainValExists_Syn_AGItf hsSemMod
@@ -205,12 +206,12 @@
                  )              )
          }
 
-{-# LINE 267 "src/ehc/EHC/CompilePhase/Semantics.chs" #-}
+{-# LINE 269 "src/ehc/EHC/CompilePhase/Semantics.chs" #-}
 cpFoldHIInfo :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpFoldHIInfo modNm
   =  do  {  cr <- get
          ;  let  (ecu,crsi,opts,_) = crBaseInfo modNm cr
-                 mbHIInfo   = ecuMbPrevHIInfo ecu
+                 mbHIInfo   = _ecuMbPrevHIInfo ecu
                  hiInfo     = panicJust "cpFoldHIInfo" mbHIInfo
                  hasMain    = HI.hiiHasMain hiInfo
          ;  when (isJust mbHIInfo && HI.hiiValidity hiInfo == HI.HIValidity_Ok)
diff --git a/src/UHC/Light/Compiler/EHC/CompilePhase/TopLevelPhases.hs b/src/UHC/Light/Compiler/EHC/CompilePhase/TopLevelPhases.hs
--- a/src/UHC/Light/Compiler/EHC/CompilePhase/TopLevelPhases.hs
+++ b/src/UHC/Light/Compiler/EHC/CompilePhase/TopLevelPhases.hs
@@ -6,6 +6,7 @@
 where
 import qualified Data.Map as Map
 import qualified Data.Set as Set
+import UHC.Util.Lens
 import qualified UHC.Util.FastSeq as Seq
 import Control.Monad.State
 import qualified UHC.Light.Compiler.Config as Cfg
@@ -23,6 +24,7 @@
 import UHC.Light.Compiler.EHC.CompilePhase.Semantics
 import UHC.Light.Compiler.EHC.CompilePhase.FlowBetweenPhase
 import UHC.Light.Compiler.EHC.CompilePhase.CompileC
+import UHC.Light.Compiler.EHC.ASTHandler.Instances
 import UHC.Light.Compiler.EHC.CompilePhase.Run
 import UHC.Light.Compiler.EHC.CompileGroup
 import UHC.Light.Compiler.EHC.CompilePhase.Module
@@ -68,7 +70,8 @@
 
 
 
-{-# LINE 114 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+
+{-# LINE 118 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 -- | top lever driver for after all per-module work has been done, and whole program stuff like combining/linking can start
 cpEhcFullProgLinkAllModules :: EHCCompileRunner m => [HsName] -> EHCompilePhaseT m ()
 cpEhcFullProgLinkAllModules modNmL
@@ -113,21 +116,21 @@
                         _ -> return ()
       }
 
-{-# LINE 171 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 175 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 cpEhcCheckAbsenceOfMutRecModules :: EHCCompileRunner m => EHCompilePhaseT m ()
 cpEhcCheckAbsenceOfMutRecModules
  = do { cr <- get
-      ; let mutRecL = filter (\ml -> length ml > 1) $ crCompileOrder cr
+      ; let mutRecL = filter (\ml -> length ml > 1) $ _crCompileOrder cr
       ; when (not $ null mutRecL)
              (cpSetLimitErrs 1 "compilation run" [rngLift emptyRange Err_MutRecModules mutRecL]
              )
       }
 
-{-# LINE 194 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 198 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 cpEhcFullProgCompileAllModules :: EHCCompileRunner m => EHCompilePhaseT m ()
 cpEhcFullProgCompileAllModules
  = do { cr <- get
-      ; let modNmLL = crCompileOrder cr
+      ; let modNmLL = _crCompileOrder cr
             modNmL = map head modNmLL
       ; cpSeq (   []
                ++ (let modNmL2 = filter (\m -> let (ecu,_,_,_) = crBaseInfo m cr in not $ filelocIsPkg $ ecuFileLocation ecu) modNmL
@@ -139,13 +142,13 @@
               )
       }
 
-{-# LINE 226 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 230 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 cpEhcFullProgPostModulePhases :: EHCCompileRunner m => EHCOpts -> [HsName] -> ([HsName],HsName) -> EHCompilePhaseT m ()
 cpEhcFullProgPostModulePhases opts modNmL modSpl
   | ehcOptOptimizationScope opts >= OptimizationScope_WholeCore = cpEhcCoreFullProgPostModulePhases opts modNmL modSpl
   | otherwise                                                   = return ()
 
-{-# LINE 268 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 272 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 cpEhcCoreFullProgPostModulePhases :: EHCCompileRunner m => EHCOpts -> [HsName] -> ([HsName],HsName) -> EHCompilePhaseT m ()
 cpEhcCoreFullProgPostModulePhases opts modNmL (impModNmL,mainModNm)
   = cpSeq ([ cpSeq [void $ cpGetPrevCore m | m <- modNmL]
@@ -165,14 +168,14 @@
                  $ CMerge.cModMerge (mOf mainModNm cr, [ mOf m cr | m <- impModNmL ])
                ; cpCleanupCore impModNmL -- clean up Core and CoreSem (it can still be read through cr in the next statement)
                }
-          where mOf m cr = panicJust "cpEhcCoreFullProgPostModulePhases.mergeIntoOneBigCore" $ ecuMbCore $ crCU m cr
+          where mOf m cr = panicJust ("cpEhcCoreFullProgPostModulePhases.mergeIntoOneBigCore: " ++ show m) $ _ecuMbCore $ crCU m cr
 
-{-# LINE 293 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 297 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 {-|
 Per module compilation of (import) ordered sequence of module, as part of a full program compilation
 
 -}
-{-# LINE 297 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 301 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 cpEhcFullProgModuleCompileN :: EHCCompileRunner m => [HsName] -> EHCompilePhaseT m ()
 cpEhcFullProgModuleCompileN modNmL
   = cpSeq (merge (map cpEhcFullProgModuleCompile1    modNmL)
@@ -182,18 +185,18 @@
         merge []       cs       = cs
         merge cs       []       = cs
 
-{-# LINE 308 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 312 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 {-|
 Find out whether a compilation is needed, and if so, can be done.
 
 -}
-{-# LINE 312 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 316 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 cpEhcFullProgModuleDetermineNeedsCompile :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpEhcFullProgModuleDetermineNeedsCompile modNm
   = do { cr <- get
        ; let (ecu,_,opts,_) = crBaseInfo modNm cr
              needsCompile = crModNeedsCompile modNm cr
-             canCompile   = crModCanCompile modNm cr
+             canCompile   = ecuCanCompile ecu
        ; when (ehcOptVerbosity opts >= VerboseDebug)
               (liftIO $ putStrLn
                 (  show modNm
@@ -211,12 +214,12 @@
        ; cpUpdCU modNm (ecuSetNeedsCompile (needsCompile && canCompile))
        }
 
-{-# LINE 337 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 341 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 {-|
 Compilation of 1 module, as part of a full program compilation
 
 -}
-{-# LINE 341 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 345 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 cpEhcFullProgModuleCompile1 :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpEhcFullProgModuleCompile1 modNm
   = do { cr <- get
@@ -234,12 +237,12 @@
        ; when (ecuHasMain ecu) (crSetAndCheckMain modNm)
        }
 
-{-# LINE 360 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 364 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 {-|
 Flow of info between modules, as part of a full program compilation
 
 -}
-{-# LINE 364 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 368 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 cpEhcFullProgBetweenModuleFlow :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpEhcFullProgBetweenModuleFlow modNm
   = do { cr <- get
@@ -250,10 +253,10 @@
        ; cpCleanupFlow modNm
        }
 
-{-# LINE 386 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 390 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 cpEhcModuleCompile1 :: EHCCompileRunner m => Maybe EHCompileUnitState -> HsName -> EHCompilePhaseT m HsName
 cpEhcModuleCompile1 targHSState modNm
-{-# LINE 390 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 394 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
   = do { cr <- get
        ; let (ecu,_,opts,fp) = crBaseInfo modNm cr
              defaultResult = modNm
@@ -262,7 +265,7 @@
        ; when (ehcOptVerbosity opts >= VerboseDebug)
               (liftIO $ putStrLn ("State: in: " ++ show (ecuState ecu) ++ ", to: " ++ show targHSState))
        ; case (ecuState ecu,targHSState) of
-{-# LINE 418 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 422 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
            (ECUS_Haskell st,Just (ECUS_Haskell HSOnlyImports))
              |    st == HSStart
                || st == LHSStart
@@ -317,7 +320,7 @@
                    ; return defaultResult
                    }
 
-{-# LINE 489 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 493 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
            (ECUS_Haskell HSStart,_)
              -> do { cpMsg modNm VerboseMinimal "Compiling Haskell"
                    ; cpEhcHaskellModulePrepare modNm
@@ -410,12 +413,12 @@
            _ -> return defaultResult
        }
 
-{-# LINE 618 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 622 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 {-|
 EH common phases: analysis + core + grin
 
 -}
-{-# LINE 622 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 626 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 cpEhcCoreModuleCommonPhases :: EHCCompileRunner m => Bool -> Bool -> Bool -> EHCOpts -> HsName -> EHCompilePhaseT m ()
 cpEhcCoreModuleCommonPhases isMainMod isTopMod doMkExec opts modNm
   = cpSeq ([
@@ -423,14 +426,14 @@
            ]
           )
 
-{-# LINE 639 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 643 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 cpEhcEhModuleCommonPhases :: EHCCompileRunner m => Bool -> Bool -> Bool -> EHCOpts -> HsName -> EHCompilePhaseT m ()
 cpEhcEhModuleCommonPhases isMainMod isTopMod doMkExec opts modNm
   = cpSeq [ cpEhcEhAnalyseModuleDefs modNm
           , cpEhcCoreModuleCommonPhases isMainMod isTopMod doMkExec opts modNm
           ]
 
-{-# LINE 647 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 651 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 -- | Common phases when starting with a Haskell module.
 -- HS common phases: HS analysis + EH common
 cpEhcHaskellModuleCommonPhases :: EHCCompileRunner m => Bool -> Bool -> EHCOpts -> HsName -> EHCompilePhaseT m ()
@@ -444,7 +447,7 @@
                }
           ]
 
-{-# LINE 666 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 670 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 -- | All the work to be done after Haskell src imports have been read/analysed.
 -- Post module import common phases: Parse + Module analysis + HS common
 cpEhcHaskellModuleAfterImport
@@ -464,7 +467,7 @@
           , cpEhcHaskellModulePostlude modNm
           ]
 
-{-# LINE 693 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 697 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 -- | All the work to be done after Core src/binary imports have been read/analysed
 cpEhcCoreModuleAfterImport
   :: EHCCompileRunner m =>
@@ -482,7 +485,7 @@
           ]
        }
 
-{-# LINE 712 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 716 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 -- | All the work to be done after CoreRun src/binary imports have been read/analysed
 cpEhcCoreRunModuleAfterImport
   :: EHCCompileRunner m =>
@@ -500,13 +503,13 @@
           ]
        }
 
-{-# LINE 735 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 739 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 {-|
 Prepare module for compilation.
 This should be the first step before compilation of a module and is meant to obtain cached info from a previous compilation.
 
 -}
-{-# LINE 752 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 756 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 cpEhcHaskellModulePrepareSrc :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpEhcHaskellModulePrepareSrc modNm
   = cpGetMetaInfo [GetMeta_Src,GetMeta_Dir] modNm
@@ -540,14 +543,14 @@
           , cpEhcHaskellModulePrepareHS2 modNm
           ]
 
-{-# LINE 797 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 801 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 cpEhcHaskellModulePostlude :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpEhcHaskellModulePostlude modNm
   = cpSeq [ cpOutputHI "hi" modNm
           , cpCleanupCU modNm
           ]
 
-{-# LINE 807 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 811 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 -- | Get import information from Haskell module source text.
 cpEhcHaskellImport
   :: EHCCompileRunner m =>
@@ -597,7 +600,7 @@
                ; cpGetHsModnameAndImports modNm
                }
 
-{-# LINE 873 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 877 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 -- | Parse a Haskell module
 cpEhcHaskellParse
   :: EHCCompileRunner m =>
@@ -616,21 +619,21 @@
              ]
           )
 
-{-# LINE 901 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 905 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 cpEhcEhParse :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpEhcEhParse modNm
   = cpSeq [ cpParseEH modNm
           , cpStopAt CompilePoint_Parse
           ]
 
-{-# LINE 909 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 913 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 cpEhcCoreParse :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpEhcCoreParse modNm
   = cpSeq [ cpParseCoreWithFPath Nothing modNm
           , cpStopAt CompilePoint_Parse
           ]
 
-{-# LINE 917 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 921 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 -- | Analyse a Haskell src module for
 --     (1) module information (import, export, etc),
 cpEhcHaskellAnalyseModuleItf :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
@@ -640,7 +643,7 @@
           , cpCleanupHSMod modNm
           ]
 
-{-# LINE 933 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 937 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 -- | Analyse a Core text/binary src module for
 --     (1) module information (import, export, etc).
 -- Note: TBD: identical to cpEhcCoreRunAnalyseModuleItf
@@ -651,7 +654,7 @@
           -- , cpCleanupHSMod modNm
           ]
 
-{-# LINE 950 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 954 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 -- | Analyse a CoreRun text/binary src module for
 --     (1) module information (import, export, etc).
 -- Note: TBD: identical to cpEhcCoreAnalyseModuleItf
@@ -662,7 +665,7 @@
           -- , cpCleanupHSMod modNm
           ]
 
-{-# LINE 967 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 971 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 -- | Analyse a Haskell src module for
 --     (2) names + dependencies
 cpEhcHaskellAnalyseModuleDefs :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
@@ -673,7 +676,7 @@
           , cpStopAt CompilePoint_AnalHS
           ]
 
-{-# LINE 979 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 983 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 -- | Analyse a Haskell src module for
 --     (3) types
 cpEhcEhAnalyseModuleDefs :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
@@ -683,7 +686,7 @@
           , cpStopAt CompilePoint_AnalEH
           ]
 
-{-# LINE 990 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 994 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 -- | Part 1 Core processing, on a per module basis, part1 is done always
 cpEhcCorePerModulePart1 :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpEhcCorePerModulePart1 modNm
@@ -700,7 +703,7 @@
            )
        }
 
-{-# LINE 1022 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 1026 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 -- | Get import information from Core module source text/binary.
 cpEhcCoreImport
   :: EHCCompileRunner m => Bool -> HsName -> EHCompilePhaseT m HsName
@@ -716,7 +719,7 @@
        ; cpGetCoreModnameAndImports modNm
        }
 
-{-# LINE 1039 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 1043 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 -- | Get import information from CoreRun module source text/binary.
 cpEhcCoreRunImport
   :: EHCCompileRunner m => Bool -> HsName -> EHCompilePhaseT m HsName
@@ -732,31 +735,31 @@
        ; cpGetCoreRunModnameAndImports modNm
        }
 
-{-# LINE 1056 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 1060 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 -- | Analyse a Core src module
 cpEhcCoreAnalyseModule :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpEhcCoreAnalyseModule modNm
   = do { cr <- get
        ; cpUpdateModOffMp [modNm]
        ; let (ecu,_,opts,_) = crBaseInfo modNm cr
-             coreSem = panicJust "cpEhcCoreAnalyseModule" $ ecuMbCoreSemMod ecu
+             coreSem = panicJust "cpEhcCoreAnalyseModule" $ _ecuMbCoreSemMod ecu
              errs = Seq.toList $ Core2ChkSem.errs_Syn_CodeAGItf coreSem
        ; cpSetLimitErrsWhen 5 "Core analysis" errs
        }
 
-{-# LINE 1069 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 1073 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 -- | Analyse a CoreRun src module
 cpEhcCoreRunAnalyseModule :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpEhcCoreRunAnalyseModule modNm
   = do { cr <- get
        ; cpUpdateModOffMp [modNm]
        ; let (ecu,_,opts,_) = crBaseInfo modNm cr
-             corerunSem = panicJust "cpEhcCoreRunAnalyseModule" $ ecuMbCoreRunSemMod ecu
+             corerunSem = panicJust "cpEhcCoreRunAnalyseModule" $ _ecuMbCoreRunSemMod ecu
              errs = [] -- No errors -- Seq.toList $ CoreRun2ChkSem.errs_Syn_AGItf corerunSem
        ; cpSetLimitErrsWhen 5 "CoreRun analysis" errs
        }
 
-{-# LINE 1082 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 1086 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 -- | Part 2 Core processing, part2 is done either for per individual module compilation or after full program analysis
 cpEhcCorePerModulePart2 :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpEhcCorePerModulePart2 modNm
@@ -767,12 +770,12 @@
                ]
        }
 
-{-# LINE 1101 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 1105 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 -- | Part 2 CoreRun processing, part2 is done either for per individual module compilation or after full program analysis
 cpEhcCoreRunPerModulePart2 :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpEhcCoreRunPerModulePart2 = cpProcessCoreRunRest
 
-{-# LINE 1132 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 1136 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 -- | Core+grin processing, on a per module basis, may only be done when full program analysis is done
 cpEhcCoreGrinPerModuleDoneFullProgAnalysis :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpEhcCoreGrinPerModuleDoneFullProgAnalysis modNm
@@ -782,7 +785,7 @@
              ]
           )
 
-{-# LINE 1143 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 1147 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 -- | Make final executable code, either still partly or fully (i.e. also linking)
 cpEhcExecutablePerModule :: EHCCompileRunner m => FinalCompileHow -> [HsName] -> HsName -> EHCompilePhaseT m ()
 cpEhcExecutablePerModule how impModNmL modNm
@@ -792,7 +795,7 @@
               [ cpCompileWithGCC how impModNmL modNm ]
        }
 
-{-# LINE 1169 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 1173 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 cpProcessHs :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpProcessHs modNm
   = cpSeq [ cpFoldHs modNm
@@ -801,7 +804,7 @@
           , cpCleanupHS modNm
           ]
 
-{-# LINE 1183 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 1187 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 cpProcessEH :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpProcessEH modNm
   = do { cr <- get
@@ -828,7 +831,7 @@
                ]
        }
 
-{-# LINE 1245 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 1249 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 -- unprocessed core -> folded core
 cpProcessCoreBasic :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpProcessCoreBasic modNm
@@ -836,14 +839,16 @@
        ; let (_,_,opts,_) = crBaseInfo modNm cr
        ; cpSeq [ cpTransformCore OptimizationScope_PerModule modNm
                , cpFlowHILamMp modNm
-               , void $ cpOutputCore    CPOutputCoreHow_Binary    [] "" Cfg.suffixDotlessBinaryCore    modNm
+               , void $ cpOutputCore    ASTFileContent_Binary    {-[]-} "" Cfg.suffixDotlessBinaryCore    modNm
+               -- , void $ cpOutputSomeModule (^. ecuCore) astHandler'_Core ASTFileContent_Binary "" Cfg.suffixDotlessBinaryCore modNm
                , cpProcessCoreFold modNm
                , when (targetIsCoreVariation (ehcOptTarget opts)) $
-                   void $ cpOutputCoreRun CPOutputCoreRunHow_Binary "" Cfg.suffixDotlessBinaryCoreRun modNm
+                   void $ -- cpOutputCoreRun ASTFileContent_Binary "" Cfg.suffixDotlessBinaryCoreRun modNm
+                          cpOutputSomeModule (^. ecuCoreRun) astHandler'_CoreRun ASTFileContent_Binary "" Cfg.suffixDotlessBinaryCoreRun modNm
                ]
         }
 
-{-# LINE 1265 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 1271 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 -- unfolded core -> folded core
 -- (called on merged core, and on core directly generated from cached grin)
 cpProcessCoreFold :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
@@ -858,7 +863,7 @@
           []
        }
 
-{-# LINE 1287 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 1293 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 cpProcessCoreModFold :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpProcessCoreModFold modNm
   = cpSeq $
@@ -866,7 +871,7 @@
       , cpFlowCoreModSem modNm
       ]
 
-{-# LINE 1296 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 1302 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 cpProcessCoreRunModFold :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpProcessCoreRunModFold modNm
   = cpSeq $
@@ -874,7 +879,7 @@
       -- , cpFlowCoreRunModSem modNm
       ]
 
-{-# LINE 1305 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 1311 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 -- folded core -> grin, jazy, and the rest
 cpProcessCoreRest :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpProcessCoreRest modNm
@@ -882,10 +887,10 @@
        ; let (_,_,opts,_) = crBaseInfo modNm cr
        ; cpSeq (   []
                 ++ (if CoreOpt_Dump `elem` ehcOptCoreOpts opts
-                    then [void $ cpOutputCore CPOutputCoreHow_Text [] "" Cfg.suffixDotlessOutputTextualCore modNm]
+                    then [void $ cpOutputCore ASTFileContent_Text {-[]-} "" Cfg.suffixDotlessOutputTextualCore modNm]
                     else [])
                 ++ (if CoreOpt_DumpBinary `elem` ehcOptCoreOpts opts
-                    then [void $ cpOutputCore CPOutputCoreHow_Binary [] "" Cfg.suffixDotlessInputOutputBinaryCore modNm]
+                    then [void $ cpOutputCore ASTFileContent_Binary {-[]-} "" Cfg.suffixDotlessInputOutputBinaryCore modNm]
                     else [])
                 ++ [ cpProcessCoreRunRest modNm ]
                 ++ [ cpCleanupCore [modNm] ]
@@ -893,7 +898,7 @@
        }
 
 
-{-# LINE 1343 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
+{-# LINE 1349 "src/ehc/EHC/CompilePhase/TopLevelPhases.chs" #-}
 -- | folded corerun -> ...
 cpProcessCoreRunRest :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpProcessCoreRunRest modNm
@@ -901,7 +906,8 @@
        ; let (_,_,opts,_) = crBaseInfo modNm cr
        ; cpSeq (   []
                 ++ (if CoreOpt_RunDump `elem` ehcOptCoreOpts opts
-                    then [void $ cpOutputCore CPOutputCoreHow_CoreRun_Text [] "" Cfg.suffixDotlessInputOutputCoreRun modNm]
+                    then -- [void $ cpOutputCore CPOutputCoreHow_CoreRun_Text {-[]-} "" Cfg.suffixDotlessInputOutputCoreRun modNm]
+                         [void $ cpOutputSomeModule (^. ecuCoreRun) astHandler'_CoreRun ASTFileContent_Text "" Cfg.suffixDotlessInputOutputCoreRun modNm]
                     else [])
                 ++ (if CoreOpt_Run `elem` ehcOptCoreOpts opts		-- TBD: only when right backend? For now, just do it
                     then [cpRunCoreRun  modNm]
diff --git a/src/UHC/Light/Compiler/EHC/CompilePhase/Transformations.hs b/src/UHC/Light/Compiler/EHC/CompilePhase/Transformations.hs
--- a/src/UHC/Light/Compiler/EHC/CompilePhase/Transformations.hs
+++ b/src/UHC/Light/Compiler/EHC/CompilePhase/Transformations.hs
@@ -4,11 +4,13 @@
 import qualified Data.Map as Map
 import qualified Data.Set as Set
 import Control.Monad.State
+import UHC.Util.Lens
 import UHC.Light.Compiler.EHC.Common
 import UHC.Light.Compiler.Base.Optimize
 import UHC.Light.Compiler.EHC.CompileUnit
 import UHC.Light.Compiler.EHC.CompileRun
 import qualified UHC.Light.Compiler.Config as Cfg
+import UHC.Light.Compiler.EHC.ASTHandler.Instances
 import UHC.Light.Compiler.CodeGen.TrfUtils
 import UHC.Light.Compiler.Core.Trf
 import UHC.Light.Compiler.EHC.CompilePhase.Output
@@ -26,7 +28,7 @@
 
 
 
-{-# LINE 71 "src/ehc/EHC/CompilePhase/Transformations.chs" #-}
+{-# LINE 78 "src/ehc/EHC/CompilePhase/Transformations.chs" #-}
 cpTransformCore :: EHCCompileRunner m => OptimizationScope -> HsName -> EHCompilePhaseT m ()
 cpTransformCore optimScope modNm
   = do { cr <- get
@@ -34,16 +36,16 @@
        ; cpMsg' modNm VerboseALot "Transforming Core ..." Nothing fp
 
          -- transform
-       ; let  mbCore     = ecuMbCore ecu
+       ; let  mbCore     = _ecuMbCore ecu
               coreInh    = crsiCoreInh crsi
               trfcoreIn  = emptyTrfCore
                              { trfstMod             	= panicJust "cpTransformCore" mbCore
-                             , trfstUniq            	= crsiNextUID crsi
+                             , trfstUniq            	= crsi ^. crsiNextUID
                              , trfstExtra = emptyTrfCoreExtra
                                  { trfcoreECUState		= ecuState ecu
-                                 -- , trfcoreIsLamLifted	= maybe False Core2ChkSem.isLamLifted_Syn_CodeAGItf $ ecuMbCoreSemMod ecu
+                                 -- , trfcoreIsLamLifted	= maybe False Core2ChkSem.isLamLifted_Syn_CodeAGItf $ _ecuMbCoreSemMod ecu
                                  , trfcoreNotYetTransformed
-                                 						= maybe (trfcoreNotYetTransformed emptyTrfCoreExtra) Core2ChkSem.notYetTransformed_Syn_CodeAGItf $ ecuMbCoreSemMod ecu
+                                 						= maybe (trfcoreNotYetTransformed emptyTrfCoreExtra) Core2ChkSem.notYetTransformed_Syn_CodeAGItf $ _ecuMbCoreSemMod ecu
                                  , trfcoreExpNmOffMp    = crsiExpNmOffMpDbg "cpTransformCore" modNm crsi
 								 , trfcoreInhLamMp      = Core2GrSem.lamMp_Inh_CodeAGItf $ crsiCoreInh crsi
                                  }
@@ -58,7 +60,7 @@
        ; cpSetUID (trfstUniq trfcoreOut)
 
          -- put back result: call info map (lambda arity, ...)
-       ; let hii   = ecuHIInfo ecu
+       ; let hii   = ecu ^. ecuHIInfo
              lamMp = HI.hiiLamMp hii
        ; cpUpdCU modNm
            ( ecuStoreHIInfo
@@ -70,7 +72,8 @@
 
          -- dump intermediate stages, print errors, if any
        ; let (nms,mcs,errs) = unzip3 $ trfstModStages trfcoreOut
-       ; cpOutputCoreModules CPOutputCoreHow_Text [{- CoreOpt_DumpAlsoNonParseable -}] (\n nm -> "-" ++ show optimScope ++ "-" ++ show n ++ "-" ++ nm) Cfg.suffixDotlessOutputTextualCore modNm [ (n,nm) | (n, Just nm) <- zip nms mcs ]
+       -- ; cpOutputCoreModules CPOutputCoreHow_Text (\n nm -> "-" ++ show optimScope ++ "-" ++ show n ++ "-" ++ nm) Cfg.suffixDotlessOutputTextualCore modNm [ (n,nm) | (n, Just nm) <- zip nms mcs ]
+       ; cpOutputSomeModules astHandler'_Core ASTFileContent_Text (\n nm -> "-" ++ show optimScope ++ "-" ++ show n ++ "-" ++ nm) Cfg.suffixDotlessOutputTextualCore modNm [ (n,nm) | (n, Just nm) <- zip nms mcs ]
        ; cpSeq $ zipWith (\nm err -> cpSetLimitErrsWhen 5 ("Core errors: " ++ nm) err) nms errs
        }
 
diff --git a/src/UHC/Light/Compiler/EHC/CompilePhase/Translations.hs b/src/UHC/Light/Compiler/EHC/CompilePhase/Translations.hs
--- a/src/UHC/Light/Compiler/EHC/CompilePhase/Translations.hs
+++ b/src/UHC/Light/Compiler/EHC/CompilePhase/Translations.hs
@@ -6,6 +6,7 @@
 import qualified Data.Map as Map
 import qualified Data.Set as Set
 import qualified UHC.Util.FastSeq as Seq
+import UHC.Util.Lens
 import Control.Monad.State
 import UHC.Light.Compiler.EHC.Common
 import UHC.Light.Compiler.EHC.CompileUnit
@@ -30,12 +31,12 @@
 
 
 
-{-# LINE 97 "src/ehc/EHC/CompilePhase/Translations.chs" #-}
+{-# LINE 99 "src/ehc/EHC/CompilePhase/Translations.chs" #-}
 cpTranslateHs2EH :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpTranslateHs2EH modNm
   =  do  {  cr <- get
          ;  let  (ecu,crsi,opts,fp) = crBaseInfo modNm cr
-                 mbHsSem= ecuMbHSSem ecu
+                 mbHsSem= _ecuMbHSSem ecu
                  hsSem  = panicJust "cpTranslateHs2EH" mbHsSem
                  eh     = HSSem.eh_Syn_AGItf hsSem
                  errs   = Seq.toList $ HSSem.errSq_Syn_AGItf hsSem
@@ -49,12 +50,12 @@
                      })
          }
 
-{-# LINE 117 "src/ehc/EHC/CompilePhase/Translations.chs" #-}
+{-# LINE 119 "src/ehc/EHC/CompilePhase/Translations.chs" #-}
 cpTranslateEH2Output :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpTranslateEH2Output modNm
   =  do  {  cr <- get
          ;  let  (ecu,crsi,opts,fp) = crBaseInfo modNm cr
-                 mbEHSem= ecuMbEHSem ecu
+                 mbEHSem= _ecuMbEHSem ecu
                  ehSem  = panicJust "cpTranslateEH2Output" mbEHSem
                  about  = "EH analyses: Type checking"
                  errs   = Seq.toList $ EHSem.allErrSq_Syn_AGItf ehSem
@@ -68,12 +69,12 @@
                  )
          }
 
-{-# LINE 162 "src/ehc/EHC/CompilePhase/Translations.chs" #-}
+{-# LINE 164 "src/ehc/EHC/CompilePhase/Translations.chs" #-}
 cpTranslateEH2Core :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 cpTranslateEH2Core modNm
   =  do  {  cr <- get
          ;  let  (ecu,crsi,opts,fp) = crBaseInfo modNm cr
-                 mbEHSem= ecuMbEHSem ecu
+                 mbEHSem= _ecuMbEHSem ecu
                  ehSem  = panicJust "cpTranslateEH2Core" mbEHSem
                  core   = cmodTrfElimNonCodegenConstructs opts $ EHSem.cmodule_Syn_AGItf  ehSem
          ;  when (isJust mbEHSem)
diff --git a/src/UHC/Light/Compiler/EHC/CompileRun.hs b/src/UHC/Light/Compiler/EHC/CompileRun.hs
--- a/src/UHC/Light/Compiler/EHC/CompileRun.hs
+++ b/src/UHC/Light/Compiler/EHC/CompileRun.hs
@@ -1,5 +1,8 @@
+{-# LANGUAGE TemplateHaskell #-}
+
 module UHC.Light.Compiler.EHC.CompileRun
 ( EHCompileRunStateInfo (..)
+, crsiOpts, crsiNextUID, crsiHereUID, crsiHSInh, crsiEHInh, crsiBState, crsiFileSuffMp
 , emptyEHCompileRunStateInfo
 , EHCCompileRunner
 , EHCompileRun, EHCompilePhaseT, EHCompilePhase
@@ -13,7 +16,6 @@
 , crsiExpNmOffMpDbg, crsiExpNmOffMp
 , crPartitionMainAndImported
 , crModNeedsCompile
-, crModCanCompile
 , crSetAndCheckMain
 , EHCTime, EHCTimeDiff, getEHCTime, ehcTimeDiff, ehcTimeDiffFmt
 , EHCIOInfo (..), newEHCIOInfo
@@ -27,12 +29,16 @@
 import System.Exit
 import System.Environment
 import System.Process
-import Control.Monad.State
+import Control.Monad.State hiding (get)
+import qualified Control.Monad.State as MS
 import Control.Monad.Error
 import Control.Exception as CE
+import UHC.Util.Lens
 import UHC.Light.Compiler.CodeGen.ValAccess as VA
 import UHC.Light.Compiler.EHC.Common
+import UHC.Light.Compiler.EHC.FileSuffMp
 import UHC.Light.Compiler.EHC.CompileUnit
+import UHC.Light.Compiler.EHC.BuildFunction
 import qualified UHC.Light.Compiler.Core as Core
 import qualified UHC.Light.Compiler.CoreRun as CoreRun
 import qualified UHC.Light.Compiler.EH.MainAG as EHSem
@@ -62,7 +68,8 @@
 
 
 
-{-# LINE 71 "src/ehc/EHC/CompileRun.chs" #-}
+
+{-# LINE 82 "src/ehc/EHC/CompileRun.chs" #-}
 type EHCTime = Integer
 type EHCTimeDiff = Integer
 
@@ -81,7 +88,7 @@
         (days, hrs  ) = r2 `quotRem` 24
         fm n x = strPadLeft '0' n (show x)
 
-{-# LINE 91 "src/ehc/EHC/CompileRun.chs" #-}
+{-# LINE 102 "src/ehc/EHC/CompileRun.chs" #-}
 data EHCIOInfo
   = EHCIOInfo
       { ehcioinfoStartTime			:: EHCTime
@@ -94,14 +101,15 @@
        newIORef (EHCIOInfo t t)
 
 
-{-# LINE 125 "src/ehc/EHC/CompileRun.chs" #-}
+{-# LINE 136 "src/ehc/EHC/CompileRun.chs" #-}
 data EHCompileRunStateInfo
   = EHCompileRunStateInfo
-      { crsiOpts        :: !EHCOpts                             -- options
-      , crsiNextUID     :: !UID                                 -- unique id, the next one
-      , crsiHereUID     :: !UID                                 -- unique id, the current one
-      , crsiHSInh       :: !HSSem.Inh_AGItf                     -- current inh attrs for HS sem
-      , crsiEHInh       :: !EHSem.Inh_AGItf                     -- current inh attrs for EH sem
+      { _crsiOpts       :: !EHCOpts                             -- options
+      , _crsiNextUID    :: !UID                                 -- unique id, the next one
+      , _crsiHereUID    :: !UID                                 -- unique id, the current one
+      , _crsiHSInh      :: !HSSem.Inh_AGItf                     -- current inh attrs for HS sem
+      , _crsiEHInh      :: !EHSem.Inh_AGItf                     -- current inh attrs for EH sem
+      , _crsiFileSuffMp :: FileSuffMp							-- allowed suffixes
       , crsiCoreInh     :: !Core2GrSem.Inh_CodeAGItf            -- current inh attrs for Core2Grin sem
       , crsiCore2RunInh	:: !CoreRun.Nm2RefMp       				-- current inh attrs for Core2CoreRun sem
       , crsiMbMainNm    :: !(Maybe HsName)                      -- name of main module, if any
@@ -112,17 +120,22 @@
       , crsiModOffMp    :: !VA.HsName2FldMpMp              		-- mapping of all modules + exp entries to offsets in module + exp tables
       , crsiEHCIOInfo	:: !(IORef EHCIOInfo)					-- unsafe info
       , crsiFilesToRm   :: ![FPath]                             -- files to clean up (remove)
+      , _crsiBState		:: !BState								-- Build state for use of build functions
       }
 
-{-# LINE 156 "src/ehc/EHC/CompileRun.chs" #-}
+{-# LINE 169 "src/ehc/EHC/CompileRun.chs" #-}
+mkLabel ''EHCompileRunStateInfo
+
+{-# LINE 173 "src/ehc/EHC/CompileRun.chs" #-}
 emptyEHCompileRunStateInfo :: EHCompileRunStateInfo
 emptyEHCompileRunStateInfo
   = EHCompileRunStateInfo
-      { crsiOpts        =   defaultEHCOpts
-      , crsiNextUID     =   uidStart
-      , crsiHereUID     =   uidStart
-      , crsiHSInh       =   panic "emptyEHCompileRunStateInfo.crsiHSInh"
-      , crsiEHInh       =   panic "emptyEHCompileRunStateInfo.crsiEHInh"
+      { _crsiOpts       =   defaultEHCOpts
+      , _crsiNextUID    =   uidStart
+      , _crsiHereUID    =   uidStart
+      , _crsiHSInh      =   panic "emptyEHCompileRunStateInfo.crsiHSInh"
+      , _crsiEHInh      =   panic "emptyEHCompileRunStateInfo.crsiEHInh"
+      , _crsiFileSuffMp =	emptyFileSuffMp
       , crsiCoreInh     =   panic "emptyEHCompileRunStateInfo.crsiCoreInh"
       , crsiCore2RunInh	=   panic "emptyEHCompileRunStateInfo.crsiCoreRunInh"
       , crsiMbMainNm    =   Nothing
@@ -133,9 +146,10 @@
       , crsiModOffMp    =   Map.empty
       , crsiEHCIOInfo   =   panic "emptyEHCompileRunStateInfo.crsiEHCIOInfo"
       , crsiFilesToRm   =   []
+      , _crsiBState   	=   emptyBState
       }
 
-{-# LINE 188 "src/ehc/EHC/CompileRun.chs" #-}
+{-# LINE 207 "src/ehc/EHC/CompileRun.chs" #-}
 crsiExpNmOffMpDbg :: String -> HsName -> EHCompileRunStateInfo -> VA.HsName2FldMp
 crsiExpNmOffMpDbg ctxt modNm crsi = mmiNmOffMp $ panicJust ("crsiExpNmOffMp." ++ ctxt ++ show ks ++ ": " ++ show modNm) $ Map.lookup modNm $ crsiModMp crsi
   where ks = Map.keys $ crsiModMp crsi
@@ -143,31 +157,31 @@
 crsiExpNmOffMp :: HsName -> EHCompileRunStateInfo -> VA.HsName2FldMp
 crsiExpNmOffMp modNm crsi = mmiNmOffMp $ panicJust ("crsiExpNmOffMp: " ++ show modNm) $ Map.lookup modNm $ crsiModMp crsi
 
-{-# LINE 197 "src/ehc/EHC/CompileRun.chs" #-}
+{-# LINE 216 "src/ehc/EHC/CompileRun.chs" #-}
 instance Show EHCompileRunStateInfo where
   show _ = "EHCompileRunStateInfo"
 
 instance PP EHCompileRunStateInfo where
   pp i = "CRSI:" >#< ppModMp (crsiModMp i)
 
-{-# LINE 205 "src/ehc/EHC/CompileRun.chs" #-}
+{-# LINE 224 "src/ehc/EHC/CompileRun.chs" #-}
 instance CompileRunStateInfo EHCompileRunStateInfo HsName () where
   crsiImportPosOfCUKey n i = ()
 
-{-# LINE 210 "src/ehc/EHC/CompileRun.chs" #-}
-class (MonadIO m, CompileRunner EHCompileUnitState HsName () FileLoc EHCompileUnit EHCompileRunStateInfo Err (EHCompilePhaseAddonT m)) => EHCCompileRunner m where
+{-# LINE 229 "src/ehc/EHC/CompileRun.chs" #-}
+class (MonadIO m, CompileRunner FileSuffInitState HsName () FileLoc EHCompileUnit EHCompileRunStateInfo Err (EHCompilePhaseAddonT m)) => EHCCompileRunner m where
 
 instance ( CompileRunStateInfo EHCompileRunStateInfo HsName ()
-         , CompileUnit EHCompileUnit HsName FileLoc EHCompileUnitState
+         , CompileUnit EHCompileUnit HsName FileLoc FileSuffInitState
          , CompileRunError Err ()
          -- , MonadError (CompileRunState Err) m
          -- , MonadState EHCompileRun (EHCompilePhaseAddonT m)
          , MonadIO m -- (EHCompilePhaseAddonT m)
          , Monad m
-         ) => CompileRunner EHCompileUnitState HsName () FileLoc EHCompileUnit EHCompileRunStateInfo Err (EHCompilePhaseAddonT m)
+         ) => CompileRunner FileSuffInitState HsName () FileLoc EHCompileUnit EHCompileRunStateInfo Err (EHCompilePhaseAddonT m)
 
 instance ( CompileRunStateInfo EHCompileRunStateInfo HsName ()
-         , CompileUnit EHCompileUnit HsName FileLoc EHCompileUnitState
+         , CompileUnit EHCompileUnit HsName FileLoc FileSuffInitState
          , CompileRunError Err ()
          -- , MonadError (CompileRunState Err) m
          -- , MonadState EHCompileRun (EHCompilePhaseAddonT m)
@@ -175,18 +189,18 @@
          , Monad m
          ) => EHCCompileRunner m
 
-{-# LINE 232 "src/ehc/EHC/CompileRun.chs" #-}
+{-# LINE 251 "src/ehc/EHC/CompileRun.chs" #-}
 type EHCompileRun           = CompileRun HsName EHCompileUnit EHCompileRunStateInfo Err
 type EHCompilePhaseAddonT m = StateT EHCompileRun m
 type EHCompilePhaseT      m = CompilePhaseT HsName EHCompileUnit EHCompileRunStateInfo Err (EHCompilePhaseAddonT m)
 type EHCompilePhase         = EHCompilePhaseT IO
 
-{-# LINE 244 "src/ehc/EHC/CompileRun.chs" #-}
+{-# LINE 263 "src/ehc/EHC/CompileRun.chs" #-}
 crBaseInfo' :: EHCompileRun -> (EHCompileRunStateInfo,EHCOpts)
 crBaseInfo' cr
   = (crsi,opts)
-  where crsi   = crStateInfo cr
-        opts   = crsiOpts  crsi
+  where crsi   = _crStateInfo cr
+        opts   = crsi ^. crsiOpts
 
 crMbBaseInfo :: HsName -> EHCompileRun -> (Maybe EHCompileUnit, EHCompileRunStateInfo, EHCOpts, Maybe FPath)
 crMbBaseInfo modNm cr
@@ -207,25 +221,25 @@
     )
   where (mbEcu, crsi, opts, mbFp) = crMbBaseInfo modNm cr
 
-{-# LINE 279 "src/ehc/EHC/CompileRun.chs" #-}
+{-# LINE 298 "src/ehc/EHC/CompileRun.chs" #-}
 cpMemUsage :: EHCCompileRunner m => EHCompilePhaseT m ()
 cpMemUsage
   = return ()
 
-{-# LINE 302 "src/ehc/EHC/CompileRun.chs" #-}
+{-# LINE 321 "src/ehc/EHC/CompileRun.chs" #-}
 cpUpdOpts :: EHCCompileRunner m => (EHCOpts -> EHCOpts) -> EHCompilePhaseT m ()
 cpUpdOpts upd
-  = cpUpdSI (\crsi -> crsi {crsiOpts = upd $ crsiOpts crsi})
+  = cpUpdSI $ crsiOpts ^$= upd -- (\crsi -> crsi {crsiOpts = upd $ crsiOpts crsi})
 
-{-# LINE 312 "src/ehc/EHC/CompileRun.chs" #-}
+{-# LINE 331 "src/ehc/EHC/CompileRun.chs" #-}
 cpRegisterFilesToRm :: EHCCompileRunner m => [FPath] -> EHCompilePhaseT m ()
 cpRegisterFilesToRm fpL
   = cpUpdSI (\crsi -> crsi {crsiFilesToRm = fpL ++ crsiFilesToRm crsi})
 
-{-# LINE 318 "src/ehc/EHC/CompileRun.chs" #-}
+{-# LINE 337 "src/ehc/EHC/CompileRun.chs" #-}
 cpRmFilesToRm :: EHCCompileRunner m => EHCompilePhaseT m ()
 cpRmFilesToRm
-  = do { cr <- get
+  = do { cr <- MS.get
        ; let (crsi,opts) = crBaseInfo' cr
              files = Set.toList $ Set.fromList $ map fpathToStr $ crsiFilesToRm crsi
        ; liftIO $ mapM rm files
@@ -234,17 +248,17 @@
   where rm f = CE.catch (removeFile f)
                         (\(e :: SomeException) -> hPutStrLn stderr (show f ++ ": " ++ show e))
 
-{-# LINE 335 "src/ehc/EHC/CompileRun.chs" #-}
+{-# LINE 354 "src/ehc/EHC/CompileRun.chs" #-}
 cpMsg :: EHCCompileRunner m => HsName -> Verbosity -> String -> EHCompilePhaseT m ()
 cpMsg modNm v m
-  = do { cr <- get
+  = do { cr <- MS.get
        ; let (_,_,_,mbFp) = crMbBaseInfo modNm cr
        ; cpMsg' modNm v m Nothing (maybe emptyFPath id mbFp)
        }
 
 cpMsg' :: EHCCompileRunner m => HsName -> Verbosity -> String -> Maybe String -> FPath -> EHCompilePhaseT m ()
 cpMsg' modNm v m mbInfo fp
-  = do { cr <- get
+  = do { cr <- MS.get
        ; let (mbEcu,crsi,opts,_) = crMbBaseInfo modNm cr
        ; ehcioinfo <- liftIO $ readIORef (crsiEHCIOInfo crsi)
        ; clockTime <- liftIO getEHCTime
@@ -262,18 +276,19 @@
        ; cpMemUsage
        }
 
-{-# LINE 376 "src/ehc/EHC/CompileRun.chs" #-}
+{-# LINE 395 "src/ehc/EHC/CompileRun.chs" #-}
 cpStepUID :: EHCCompileRunner m => EHCompilePhaseT m ()
 cpStepUID
-  = cpUpdSI (\crsi -> let (n,h) = mkNewLevUID (crsiNextUID crsi)
-                      in  crsi {crsiNextUID = n, crsiHereUID = h}
+  = cpUpdSI (\crsi -> let (n,h) = mkNewLevUID (crsi ^. crsiNextUID)
+                      in  crsiNextUID ^= n $ crsiHereUID ^= h $ crsi
+                          -- crsi {_crsiNextUID = n, _crsiHereUID = h}
             )
 
 cpSetUID :: EHCCompileRunner m => UID -> EHCompilePhaseT m ()
 cpSetUID u
-  = cpUpdSI (\crsi -> crsi {crsiNextUID = u})
+  = cpUpdSI $ crsiNextUID ^= u -- (\crsi -> crsi {crsiNextUID = u})
 
-{-# LINE 392 "src/ehc/EHC/CompileRun.chs" #-}
+{-# LINE 412 "src/ehc/EHC/CompileRun.chs" #-}
 cpSystem' :: EHCCompileRunner m => Maybe FilePath -> (FilePath,[String]) -> EHCompilePhaseT m ()
 cpSystem' mbStdOut (cmd,args)
   = do { exitCode <- liftIO $ system $ showShellCmd $ (cmd,args ++ (maybe [] (\o -> [">", o]) mbStdOut))
@@ -285,7 +300,7 @@
 cpSystem :: EHCCompileRunner m => (FilePath,[String]) -> EHCompilePhaseT m ()
 cpSystem = cpSystem' Nothing
 
-{-# LINE 422 "src/ehc/EHC/CompileRun.chs" #-}
+{-# LINE 442 "src/ehc/EHC/CompileRun.chs" #-}
 cpSystemRaw :: EHCCompileRunner m => String -> [String] -> EHCompilePhaseT m ()
 cpSystemRaw cmd args
   = do { exitCode <- liftIO $ rawSystem cmd args
@@ -294,33 +309,33 @@
            _           -> cpSetErrs [rngLift emptyRange Err_PP $ pp $ show exitCode] -- cpSetFail
        }
 
-{-# LINE 436 "src/ehc/EHC/CompileRun.chs" #-}
+{-# LINE 456 "src/ehc/EHC/CompileRun.chs" #-}
 cpStopAt :: EHCCompileRunner m => CompilePoint -> EHCompilePhaseT m ()
 cpStopAt atPhase
-  = do { cr <- get
+  = do { cr <- MS.get
        ; let (_,opts) = crBaseInfo' cr
        ; unless (atPhase < ehcStopAtPoint opts)
                 cpSetStopAllSeq
        }
 
-{-# LINE 450 "src/ehc/EHC/CompileRun.chs" #-}
+{-# LINE 470 "src/ehc/EHC/CompileRun.chs" #-}
 crPartitionNewerOlderImports :: HsName -> EHCompileRun -> ([EHCompileUnit],[EHCompileUnit])
 crPartitionNewerOlderImports modNm cr
   = partition isNewer $ map (flip crCU cr) $ ecuImpNmL ecu
   where ecu = crCU modNm cr
-        t   = panicJust "crPartitionNewerOlderImports1" $ ecuMbHIInfoTime ecu
+        t   = panicJust "crPartitionNewerOlderImports1" $ _ecuMbHIInfoTime ecu
         isNewer ecu'
             | isJust mbt = t' `diffClockTimes` t > noTimeDiff
             | otherwise  = False
-            where t' = panicJust "crPartitionNewerOlderImports2" $ ecuMbHIInfoTime ecu'
-                  mbt = ecuMbHIInfoTime ecu'
+            where t' = panicJust "crPartitionNewerOlderImports2" $ _ecuMbHIInfoTime ecu'
+                  mbt = _ecuMbHIInfoTime ecu'
 
-{-# LINE 467 "src/ehc/EHC/CompileRun.chs" #-}
+{-# LINE 487 "src/ehc/EHC/CompileRun.chs" #-}
 -- | Partition modules into main and non main (i.e. imported) module names
 crPartitionMainAndImported :: EHCompileRun -> [HsName] -> ([HsName], [HsName])
 crPartitionMainAndImported cr modNmL = partition (\n -> ecuHasMain $ crCU n cr) modNmL
 
-{-# LINE 477 "src/ehc/EHC/CompileRun.chs" #-}
+{-# LINE 497 "src/ehc/EHC/CompileRun.chs" #-}
 crModNeedsCompile :: HsName -> EHCompileRun -> Bool
 crModNeedsCompile modNm cr
   = ecuIsMainMod ecu -- ecuIsTopMod ecu
@@ -330,15 +345,9 @@
            )
   where ecu = crCU modNm cr
         (newer,_) = crPartitionNewerOlderImports modNm cr
-        opts = crsiOpts $ crStateInfo cr
-
-{-# LINE 498 "src/ehc/EHC/CompileRun.chs" #-}
-crModCanCompile :: HsName -> EHCompileRun -> Bool
-crModCanCompile modNm cr
-  = isJust (ecuMbSrcTime ecu) && ecuDirIsWritable ecu
-  where ecu = crCU modNm cr
+        opts = _crStateInfo cr ^. crsiOpts
 
-{-# LINE 509 "src/ehc/EHC/CompileRun.chs" #-}
+{-# LINE 529 "src/ehc/EHC/CompileRun.chs" #-}
 -- | split module names in those part of a package, and others
 crPartitionIntoPkgAndOthers :: EHCompileRun -> [HsName] -> ([PkgModulePartition],[HsName])
 crPartitionIntoPkgAndOthers cr modNmL
@@ -353,10 +362,10 @@
                   FileLocKind_Pkg p d -> ([((p,d),[m])], [ ])
               where (ecu,_,_,_) = crBaseInfo m cr
 
-{-# LINE 529 "src/ehc/EHC/CompileRun.chs" #-}
+{-# LINE 549 "src/ehc/EHC/CompileRun.chs" #-}
 crSetAndCheckMain :: EHCCompileRunner m => HsName -> EHCompilePhaseT m ()
 crSetAndCheckMain modNm
-  = do { cr <- get
+  = do { cr <- MS.get
        ; let (crsi,opts) = crBaseInfo' cr
              mkerr lim ns = cpSetLimitErrs 1 "compilation run" [rngLift emptyRange Err_MayOnlyHaveNrMain lim ns modNm]
        ; case crsiMbMainNm crsi of
diff --git a/src/UHC/Light/Compiler/EHC/CompileUnit.hs b/src/UHC/Light/Compiler/EHC/CompileUnit.hs
--- a/src/UHC/Light/Compiler/EHC/CompileUnit.hs
+++ b/src/UHC/Light/Compiler/EHC/CompileUnit.hs
@@ -1,5 +1,13 @@
+{-# LANGUAGE TemplateHaskell #-}
+
 module UHC.Light.Compiler.EHC.CompileUnit
 ( EHCompileUnit (..)
+, ecuASTType, ecuASTFileContent, ecuASTFileUse
+, ecuMbCore, ecuCore, ecuMbCoreSem, ecuCoreSem
+, ecuMbCore2CoreRunSem, ecuMbCoreRun, ecuCoreRun
+, ecuMbCoreSemMod, ecuCoreSemMod
+, ecuMbCoreRunSemMod, ecuCoreRunSemMod
+, ecuMbHS, ecuHS, ecuMbHSSem, ecuHSSem, ecuMbEH, ecuEH, ecuMbEHSem, ecuEHSem
 , ecuFilePath
 , emptyECU
 , ecuFinalDestinationState
@@ -12,6 +20,9 @@
 , ecuStoreCore2CoreRunSem
 , ecuSrcHasSuffix
 , Optim (..), defaultOptim
+, ecuMbCoreTime, ecuCoreTime
+, ecuMbCoreRunTime, ecuCoreRunTime
+, ecuMbHIInfo, ecuHIInfo, ecuMbPrevHIInfo, ecuPrevHIInfo, ecuMbHSSemMod, ecuHSSemMod, ecuMbSrcTime, ecuSrcTime, ecuMbHIInfoTime, ecuHIInfoTime
 , ecuHSDeclImpNmS, ecuHIDeclImpNmS, ecuHIUsedImpNmS
 , ecuIsMainMod
 , ecuImpNmS, ecuImpNmL
@@ -24,7 +35,9 @@
 , ecuIsHSNewerThanHI
 , ecuIsValidHIInfo
 , ecuCanUseHIInsteadOfHS
+, ecuCanCompile
 , EHCCompileSeqNr (..)
+, ecuMbPrevSearchInfo, ecuPrevSearchInfo
 , ecuAnHIInfo
 , ecuStoreOpts, ecuStorePragmas, ecuStoreUsedNames, ecuSetTarget
 , ecuStoreGenCodeFiles
@@ -33,6 +46,8 @@
 import qualified Data.Map as Map
 import qualified Data.Set as Set
 import UHC.Light.Compiler.EHC.Common
+import UHC.Util.Lens
+import Data.Typeable
 import qualified UHC.Light.Compiler.HS as HS
 import qualified UHC.Light.Compiler.EH as EH
 import qualified UHC.Light.Compiler.Core as Core
@@ -63,7 +78,7 @@
 
 
 
-{-# LINE 99 "src/ehc/EHC/CompileUnit.chs" #-}
+{-# LINE 88 "src/ehc/EHC/CompileUnit.chs" #-}
 data Optim
   = Optim
 
@@ -71,7 +86,7 @@
 defaultOptim
   = Optim
 
-{-# LINE 122 "src/ehc/EHC/CompileUnit.chs" #-}
+{-# LINE 111 "src/ehc/EHC/CompileUnit.chs" #-}
 data EHCCompileSeqNr
   = EHCCompileSeqNr
       { ecseqnrThis     :: !Int
@@ -88,38 +103,43 @@
     where tot = show total
           ths = show this
 
-{-# LINE 144 "src/ehc/EHC/CompileUnit.chs" #-}
+{-# LINE 133 "src/ehc/EHC/CompileUnit.chs" #-}
+-- | Single compilation unit info, fields prefixed with _ have Lens access
 data EHCompileUnit
   = EHCompileUnit
       { ecuSrcFilePath       :: !FPath
       , ecuMbCppFilePath     :: !(Maybe FPath)
+      , _ecuMbPrevSearchInfo :: !(Maybe PrevSearchInfo)
       , ecuFileLocation      :: !FileLoc
       , ecuGrpNm             :: !HsName
       , ecuModNm             :: !HsName
-      , ecuMbHS              :: !(Maybe HS.AGItf)
-      , ecuMbHSSem           :: !(Maybe HSSem.Syn_AGItf)
-      , ecuMbEH              :: !(Maybe EH.AGItf)
-      , ecuMbEHSem           :: !(Maybe EHSem.Syn_AGItf)
-      , ecuMbCore            :: !(Maybe Core.CModule)
-      , ecuMbCoreSem         :: !(Maybe Core2GrSem.Syn_CodeAGItf)
-      , ecuMbCore2CoreRunSem :: !(Maybe Core2CoreRunSem.Syn_CodeAGItf)
-      , ecuMbCoreSemMod      :: !(Maybe Core2ChkSem.Syn_CodeAGItf)
-      , ecuMbCoreRun         :: !(Maybe CoreRun.Mod)
-      , ecuMbCoreRunSemMod   :: !(Maybe CoreRun2ChkSem.Syn_AGItf)
+      , _ecuMbHS             :: !(Maybe HS.AGItf)
+      , _ecuMbHSSem          :: !(Maybe HSSem.Syn_AGItf)
+      , _ecuMbEH             :: !(Maybe EH.AGItf)
+      , _ecuMbEHSem          :: !(Maybe EHSem.Syn_AGItf)
+      , _ecuMbCore           :: !(Maybe Core.CModule)
+      , _ecuMbCoreSem        :: !(Maybe Core2GrSem.Syn_CodeAGItf)
+      , _ecuMbCore2CoreRunSem:: !(Maybe Core2CoreRunSem.Syn_CodeAGItf)
+      , _ecuMbCoreSemMod     :: !(Maybe Core2ChkSem.Syn_CodeAGItf)
+      , _ecuMbCoreRun        :: !(Maybe CoreRun.Mod)
+      , _ecuMbCoreRunSemMod  :: !(Maybe CoreRun2ChkSem.Syn_AGItf)
       , ecuState             :: !EHCompileUnitState
+      , _ecuASTType          :: !ASTType
+      , _ecuASTFileContent   :: !ASTFileContent
+      , _ecuASTFileUse       :: !ASTFileUse
       , ecuImportUsedModules :: !ImportUsedModules                  -- imported modules info
       , ecuIsTopMod          :: !Bool                               -- module has been specified for compilation on commandline
       , ecuHasMain           :: !Bool                               -- has a def for 'main'?
       , ecuNeedsCompile      :: !Bool                               -- (re)compilation from .hs needed?
-      , ecuMbSrcTime         :: !(Maybe ClockTime)                  -- timestamp of possibly absent source (hs, or other type) file
-      , ecuMbHIInfoTime      :: !(Maybe ClockTime)                  -- timestamp of possibly previously generated hi file
-      , ecuMbCoreTime        :: !(Maybe ClockTime)                  -- timestamp of possibly previously generated core file
-      , ecuMbCoreRunTime     :: !(Maybe ClockTime)                  -- timestamp of possibly previously generated corerun file
-      , ecuMbHSSemMod        :: !(Maybe HSSemMod.Syn_AGItf)
+      , _ecuMbSrcTime        :: !(Maybe ClockTime)                  -- timestamp of possibly absent source (hs, or other type) file
+      , _ecuMbHIInfoTime     :: !(Maybe ClockTime)                  -- timestamp of possibly previously generated hi file
+      , _ecuMbCoreTime       :: !(Maybe ClockTime)                  -- timestamp of possibly previously generated core file
+      , _ecuMbCoreRunTime    :: !(Maybe ClockTime)                  -- timestamp of possibly previously generated corerun file
+      , _ecuMbHSSemMod       :: !(Maybe HSSemMod.Syn_AGItf)
       , ecuMod               :: !Mod                                -- import/export info of module
-      , ecuMbPrevHIInfo      :: !(Maybe HI.HIInfo)                  -- possible HI info of previous run
+      , _ecuMbPrevHIInfo     :: !(Maybe HI.HIInfo)                  -- possible HI info of previous run
       , ecuMbOptim           :: !(Maybe Optim)
-      , ecuHIInfo            :: !HI.HIInfo                          -- HI info of module
+      , _ecuMbHIInfo         :: !(Maybe HI.HIInfo)                  -- HI info of module
       , ecuDirIsWritable     :: !Bool                               -- can be written in dir of module?
       , ecuMbOpts            :: (Maybe EHCOpts)                     -- possibly per module adaption of options (caused by pragmas)
       , ecuTarget            :: Target                              -- target for which we compile
@@ -128,64 +148,103 @@
       , ecuSeqNr             :: !EHCCompileSeqNr                    -- sequence nr of sorted compilation
       , ecuGenCodeFiles      :: ![FPath]                            -- generated code files
       }
+      deriving Typeable
 
-{-# LINE 230 "src/ehc/EHC/CompileUnit.chs" #-}
+{-# LINE 225 "src/ehc/EHC/CompileUnit.chs" #-}
+mkLabel ''EHCompileUnit
+
+
+{-# LINE 232 "src/ehc/EHC/CompileUnit.chs" #-}
+ecuCore = isoMb "ecuMbCore" ecuMbCore
+ecuCoreSem = isoMb "ecuMbCoreSem" ecuMbCoreSem
+{-# LINE 236 "src/ehc/EHC/CompileUnit.chs" #-}
+ecuCoreTime = isoMb "ecuMbCoreTime" ecuMbCoreTime
+{-# LINE 248 "src/ehc/EHC/CompileUnit.chs" #-}
+ecuCoreRun = isoMb "ecuMbCoreRun" ecuMbCoreRun
+{-# LINE 251 "src/ehc/EHC/CompileUnit.chs" #-}
+ecuCoreRunTime = isoMb "ecuMbCoreRunTime" ecuMbCoreRunTime
+{-# LINE 254 "src/ehc/EHC/CompileUnit.chs" #-}
+ecuCoreSemMod = isoMb "ecuMbCoreSemMod" ecuMbCoreSemMod
+{-# LINE 257 "src/ehc/EHC/CompileUnit.chs" #-}
+ecuCoreRunSemMod = isoMb "ecuMbCoreRunSemMod" ecuMbCoreRunSemMod
+
+{-# LINE 261 "src/ehc/EHC/CompileUnit.chs" #-}
+ecuEH = isoMb "ecuMbEH" ecuMbEH
+ecuEHSem = isoMb "ecuMbEHSem" ecuMbEHSem
+ecuHS = isoMb "ecuMbHS" ecuMbHS
+ecuHSSem = isoMb "ecuMbHSSem" ecuMbHSSem
+
+{-# LINE 268 "src/ehc/EHC/CompileUnit.chs" #-}
+ecuHIInfo = isoMbWithDefault HI.emptyHIInfo ecuMbHIInfo
+ecuPrevHIInfo = isoMb "ecuMbPrevHIInfo" ecuMbPrevHIInfo
+ecuHSSemMod = isoMb "ecuMbHSSemMod" ecuMbHSSemMod
+ecuSrcTime = isoMb "ecuMbSrcTime" ecuMbSrcTime
+ecuHIInfoTime = isoMb "ecuMbHIInfoTime" ecuMbHIInfoTime
+
+{-# LINE 276 "src/ehc/EHC/CompileUnit.chs" #-}
+ecuPrevSearchInfo = isoMb "ecuMbPrevSearchInfo" ecuMbPrevSearchInfo
+
+{-# LINE 280 "src/ehc/EHC/CompileUnit.chs" #-}
 ecuHSDeclImpNmS = iumHSDeclModules . ecuImportUsedModules
 ecuHIDeclImpNmS = iumHIDeclModules . ecuImportUsedModules
 ecuHIUsedImpNmS = iumHIUsedModules . ecuImportUsedModules
 
-{-# LINE 236 "src/ehc/EHC/CompileUnit.chs" #-}
+{-# LINE 286 "src/ehc/EHC/CompileUnit.chs" #-}
 ecuFilePath :: EHCompileUnit -> FPath
 ecuFilePath ecu
   = maybe (ecuSrcFilePath ecu) id (ecuMbCppFilePath ecu)
 
-{-# LINE 246 "src/ehc/EHC/CompileUnit.chs" #-}
+{-# LINE 296 "src/ehc/EHC/CompileUnit.chs" #-}
 ecuIsMainMod :: EHCompileUnit -> Bool
 ecuIsMainMod e = ecuIsTopMod e && ecuHasMain e
 
-{-# LINE 251 "src/ehc/EHC/CompileUnit.chs" #-}
+{-# LINE 301 "src/ehc/EHC/CompileUnit.chs" #-}
 -- | give the current value HIInfo, or the previous one
 ecuAnHIInfo :: EHCompileUnit -> HI.HIInfo
 ecuAnHIInfo e
-  = case ecuMbPrevHIInfo e of
+  = case _ecuMbPrevHIInfo e of
       Just pi | HI.hiiIsEmpty hii
         -> pi
       _ -> hii
-  where hii = ecuHIInfo e
+  where hii = e ^. ecuHIInfo
 
-{-# LINE 262 "src/ehc/EHC/CompileUnit.chs" #-}
+{-# LINE 312 "src/ehc/EHC/CompileUnit.chs" #-}
 emptyECU :: EHCompileUnit
 emptyECU
   = EHCompileUnit
       { ecuSrcFilePath       = emptyFPath
       , ecuMbCppFilePath     = Nothing
+      , _ecuMbPrevSearchInfo = Nothing
       , ecuFileLocation      = emptyFileLoc
       , ecuGrpNm             = hsnUnknown
       , ecuModNm             = hsnUnknown
-      , ecuMbHS              = Nothing
-      , ecuMbHSSem           = Nothing
-      , ecuMbEH              = Nothing
-      , ecuMbEHSem           = Nothing
-      , ecuMbCore            = Nothing
-      , ecuMbCoreSem         = Nothing
-      , ecuMbCore2CoreRunSem = Nothing
-      , ecuMbCoreSemMod      = Nothing
-      , ecuMbCoreRun		 = Nothing
-      , ecuMbCoreRunSemMod   = Nothing
+      , _ecuMbHS             = Nothing
+      , _ecuMbHSSem          = Nothing
+      , _ecuMbEH             = Nothing
+      , _ecuMbEHSem          = Nothing
+      , _ecuMbCore           = Nothing
+      , _ecuMbCoreSem        = Nothing
+      , _ecuMbCore2CoreRunSem= Nothing
+      , _ecuMbCoreSemMod     = Nothing
+      , _ecuMbCoreRun		 = Nothing
+      , _ecuMbCoreRunSemMod  = Nothing
       , ecuState             = ECUS_Unknown
+      , _ecuASTType          = ASTType_Unknown
+      , _ecuASTFileContent   = ASTFileContent_Unknown
+      , _ecuASTFileUse       = ASTFileUse_Unknown
       , ecuImportUsedModules = emptyImportUsedModules
       , ecuIsTopMod          = False
       , ecuHasMain           = False
       , ecuNeedsCompile      = True
-      , ecuMbSrcTime         = Nothing
-      , ecuMbHIInfoTime      = Nothing
-      , ecuMbCoreTime        = Nothing
-      , ecuMbCoreRunTime	 = Nothing
-      , ecuMbHSSemMod        = Nothing
+      , _ecuMbSrcTime        = Nothing
+      , _ecuMbHIInfoTime     = Nothing
+      , _ecuMbCoreTime       = Nothing
+      , _ecuMbCoreRunTime	 = Nothing
+      , _ecuMbHSSemMod       = Nothing
       , ecuMod               = emptyMod
-      , ecuMbPrevHIInfo      = Nothing
+      , _ecuMbPrevHIInfo     = Nothing
       , ecuMbOptim           = Nothing
-      , ecuHIInfo            = HI.emptyHIInfo
+      , _ecuMbHIInfo         = Nothing
       , ecuDirIsWritable     = False
       , ecuMbOpts            = Nothing
       , ecuTarget            = defaultTarget
@@ -195,7 +254,7 @@
       , ecuGenCodeFiles      = []
       }
 
-{-# LINE 352 "src/ehc/EHC/CompileUnit.chs" #-}
+{-# LINE 405 "src/ehc/EHC/CompileUnit.chs" #-}
 ecuImpNmS :: EHCompileUnit -> Set.Set HsName
 ecuImpNmS ecu = -- (\v -> tr "XX" (pp $ Set.toList v) v) $
   Set.delete (ecuModNm ecu) $ Set.unions [ ecuHSDeclImpNmS ecu, ecuHIDeclImpNmS ecu, ecuHIUsedImpNmS ecu ]
@@ -203,7 +262,7 @@
 ecuImpNmL :: EHCompileUnit -> [HsName]
 ecuImpNmL = Set.toList . ecuImpNmS -- ecu = (nub $ ecuHSDeclImpNmL ecu ++ ecuHIDeclImpNmL ecu ++ ecuHIUsedImpNmL ecu) \\ [ecuModNm ecu]
 
-{-# LINE 361 "src/ehc/EHC/CompileUnit.chs" #-}
+{-# LINE 414 "src/ehc/EHC/CompileUnit.chs" #-}
 -- | The used modules, for linking, according to .hi info
 ecuTransClosedUsedModMp :: EHCompileUnit -> HI.HIInfoUsedModMp
 ecuTransClosedUsedModMp = HI.hiiTransClosedUsedModMp . ecuAnHIInfo
@@ -212,18 +271,19 @@
 ecuTransClosedOrphanModS :: EHCompileUnit -> Set.Set HsName
 ecuTransClosedOrphanModS = HI.hiiTransClosedOrphanModS . ecuAnHIInfo
 
-{-# LINE 371 "src/ehc/EHC/CompileUnit.chs" #-}
+{-# LINE 424 "src/ehc/EHC/CompileUnit.chs" #-}
 -- | Is orphan, according to .hi info
 ecuIsOrphan :: EHCompileUnit -> Bool
 ecuIsOrphan = isJust . HI.hiiMbOrphan . ecuAnHIInfo
 
-{-# LINE 391 "src/ehc/EHC/CompileUnit.chs" #-}
-instance CompileUnitState EHCompileUnitState where
-  cusDefault      = ECUS_Eh EHStart
-  cusUnk          = ECUS_Unknown
-  cusIsUnk        = (==ECUS_Unknown)
-{-# LINE 400 "src/ehc/EHC/CompileUnit.chs" #-}
-  cusIsImpKnown s = case s of
+{-# LINE 444 "src/ehc/EHC/CompileUnit.chs" #-}
+instance CompileUnitState FileSuffInitState where
+  cusDefault      = (ECUS_Eh EHStart, ASTType_EH, ASTFileContent_Text, ASTFileUse_Src)
+  cusUnk          = (ECUS_Unknown, ASTType_Unknown, ASTFileContent_Unknown, ASTFileUse_Unknown)
+  cusIsUnk (ECUS_Unknown,_,_,_) = True
+  cusIsUnk _                    = False
+{-# LINE 454 "src/ehc/EHC/CompileUnit.chs" #-}
+  cusIsImpKnown (s,_,_,_) = case s of
                       ECUS_Haskell HSOnlyImports  -> True
                       ECUS_Haskell HIOnlyImports  -> True
                       ECUS_Haskell HMOnlyMinimal  -> True
@@ -234,21 +294,21 @@
                       ECUS_CoreRun CRROnlyImports -> True
                       _                           -> False
 
-{-# LINE 419 "src/ehc/EHC/CompileUnit.chs" #-}
+{-# LINE 473 "src/ehc/EHC/CompileUnit.chs" #-}
 instance FileLocatable EHCompileUnit FileLoc where
   fileLocation   = ecuFileLocation
   noFileLocation = emptyFileLoc
 
-{-# LINE 425 "src/ehc/EHC/CompileUnit.chs" #-}
-instance CompileUnit EHCompileUnit HsName FileLoc EHCompileUnitState where
+{-# LINE 479 "src/ehc/EHC/CompileUnit.chs" #-}
+instance CompileUnit EHCompileUnit HsName FileLoc FileSuffInitState where
   cuDefault         = emptyECU
   cuFPath           = ecuFilePath
   cuLocation        = fileLocation
   cuKey             = ecuModNm
-  cuState           = ecuState
+  cuState u         = (ecuState u, _ecuASTType u, _ecuASTFileContent u, _ecuASTFileUse u)
   cuUpdFPath        = ecuStoreSrcFilePath
   cuUpdLocation     = ecuStoreFileLocation
-  cuUpdState        = ecuStoreState
+  cuUpdState (s,t,c,u) = ecuStoreState s . (ecuASTType ^= t) . (ecuASTFileContent ^= c) . (ecuASTFileUse ^= u)
   cuUpdKey   nm u   = u {ecuModNm = nm}
   cuImports         = ecuImpNmL
   cuParticipation u = if not (Set.null $ Set.filter (Pragma.pragmaIsExcludeTarget $ ecuTarget u) $ ecuPragmas u)
@@ -274,7 +334,7 @@
       ":" >#< ppBracketsCommas (ecuImpNmL ecu) >|<
       "," >#< show (ecuState ecu)
 
-{-# LINE 471 "src/ehc/EHC/CompileUnit.chs" #-}
+{-# LINE 525 "src/ehc/EHC/CompileUnit.chs" #-}
 -- | The final state to be reached
 ecuFinalDestinationState :: EHCompileUnit -> EHCompileUnitState
 ecuFinalDestinationState ecu = ecuStateFinalDestination upd $ ecuState ecu
@@ -284,7 +344,7 @@
           | otherwise           = ECUS_Haskell HIAllSem
         upd s                   = s
 
-{-# LINE 488 "src/ehc/EHC/CompileUnit.chs" #-}
+{-# LINE 542 "src/ehc/EHC/CompileUnit.chs" #-}
 type EcuUpdater a = a -> EHCompileUnit -> EHCompileUnit
 
 ecuStoreSrcFilePath :: EcuUpdater FPath
@@ -297,53 +357,53 @@
 ecuStoreState x ecu = ecu { ecuState = x }
 
 ecuStoreHS :: EcuUpdater HS.AGItf
-ecuStoreHS x ecu = ecu { ecuMbHS = Just x }
+ecuStoreHS x ecu = ecu { _ecuMbHS = Just x }
 
 ecuStoreEH :: EcuUpdater EH.AGItf
-ecuStoreEH x ecu = ecu { ecuMbEH = Just x }
+ecuStoreEH x ecu = ecu { _ecuMbEH = Just x }
 
 ecuStoreHSSem :: EcuUpdater HSSem.Syn_AGItf
-ecuStoreHSSem x ecu = ecu { ecuMbHSSem = Just x }
+ecuStoreHSSem x ecu = ecu { _ecuMbHSSem = Just x }
 
 ecuStoreEHSem :: EcuUpdater EHSem.Syn_AGItf
-ecuStoreEHSem x ecu = ecu { ecuMbEHSem = Just x }
+ecuStoreEHSem x ecu = ecu { _ecuMbEHSem = Just x }
 
-{-# LINE 513 "src/ehc/EHC/CompileUnit.chs" #-}
+{-# LINE 567 "src/ehc/EHC/CompileUnit.chs" #-}
 ecuStoreCoreSemMod :: EcuUpdater Core2ChkSem.Syn_CodeAGItf
-ecuStoreCoreSemMod x ecu = ecu { ecuMbCoreSemMod = Just x }
+ecuStoreCoreSemMod x ecu = ecu { _ecuMbCoreSemMod = Just x }
 
-{-# LINE 518 "src/ehc/EHC/CompileUnit.chs" #-}
+{-# LINE 572 "src/ehc/EHC/CompileUnit.chs" #-}
 ecuStoreCoreSem :: EcuUpdater Core2GrSem.Syn_CodeAGItf
-ecuStoreCoreSem x ecu = ecu { ecuMbCoreSem = Just x }
+ecuStoreCoreSem x ecu = ecu { _ecuMbCoreSem = Just x }
 
-{-# LINE 523 "src/ehc/EHC/CompileUnit.chs" #-}
+{-# LINE 577 "src/ehc/EHC/CompileUnit.chs" #-}
 ecuStoreCore :: EcuUpdater Core.CModule
-ecuStoreCore x ecu | x `seq` True = ecu { ecuMbCore = Just x }
+ecuStoreCore x ecu | x `seq` True = ecu { _ecuMbCore = Just x }
 
-{-# LINE 534 "src/ehc/EHC/CompileUnit.chs" #-}
+{-# LINE 588 "src/ehc/EHC/CompileUnit.chs" #-}
 ecuStoreCoreRun :: EcuUpdater CoreRun.Mod
-ecuStoreCoreRun x ecu | x `seq` True = ecu { ecuMbCoreRun = Just x }
+ecuStoreCoreRun x ecu | x `seq` True = ecu { _ecuMbCoreRun = Just x }
 
-{-# LINE 539 "src/ehc/EHC/CompileUnit.chs" #-}
+{-# LINE 593 "src/ehc/EHC/CompileUnit.chs" #-}
 ecuStoreCoreRunSemMod :: EcuUpdater CoreRun2ChkSem.Syn_AGItf
-ecuStoreCoreRunSemMod x ecu = ecu { ecuMbCoreRunSemMod = Just x }
+ecuStoreCoreRunSemMod x ecu = ecu { _ecuMbCoreRunSemMod = Just x }
 
-{-# LINE 544 "src/ehc/EHC/CompileUnit.chs" #-}
+{-# LINE 598 "src/ehc/EHC/CompileUnit.chs" #-}
 ecuStoreCore2CoreRunSem :: EcuUpdater Core2CoreRunSem.Syn_CodeAGItf
-ecuStoreCore2CoreRunSem x ecu = ecu { ecuMbCore2CoreRunSem = Just x }
+ecuStoreCore2CoreRunSem x ecu = ecu { _ecuMbCore2CoreRunSem = Just x }
 
-{-# LINE 595 "src/ehc/EHC/CompileUnit.chs" #-}
+{-# LINE 649 "src/ehc/EHC/CompileUnit.chs" #-}
 ecuStoreSrcTime :: EcuUpdater ClockTime
-ecuStoreSrcTime x ecu = ecu { ecuMbSrcTime = Just x }
+ecuStoreSrcTime x ecu = ecu { _ecuMbSrcTime = Just x }
 
 -- ecuStoreHITime :: EcuUpdater ClockTime
 -- ecuStoreHITime x ecu = ecu { ecuMbHITime = Just x }
 
 ecuStoreHIInfoTime :: EcuUpdater ClockTime
-ecuStoreHIInfoTime x ecu = ecu { ecuMbHIInfoTime = Just x }
+ecuStoreHIInfoTime x ecu = ecu { _ecuMbHIInfoTime = Just x }
 
 ecuStoreHSSemMod :: EcuUpdater HSSemMod.Syn_AGItf
-ecuStoreHSSemMod x ecu = ecu { ecuMbHSSemMod = Just x }
+ecuStoreHSSemMod x ecu = ecu { _ecuMbHSSemMod = Just x }
 
 ecuStoreHSDeclImpS :: EcuUpdater (Set.Set HsName)
 ecuStoreHSDeclImpS x ecu = ecu { ecuImportUsedModules = ium {iumHSDeclModules = x} }
@@ -380,27 +440,27 @@
 -- ecuStorePrevHISem x ecu = ecu { ecuMbPrevHISem = Just x }
 
 ecuStorePrevHIInfo :: EcuUpdater HI.HIInfo
-ecuStorePrevHIInfo x ecu = ecu { ecuMbPrevHIInfo = Just x }
+ecuStorePrevHIInfo x ecu = ecu { _ecuMbPrevHIInfo = Just x }
 
 ecuStoreOptim :: EcuUpdater Optim
 ecuStoreOptim x ecu = ecu { ecuMbOptim = Just x }
 
 ecuStoreHIInfo :: EcuUpdater HI.HIInfo
-ecuStoreHIInfo x ecu | x `seq` True = ecu { ecuHIInfo = x }
+ecuStoreHIInfo x ecu | x `seq` True = ecu { _ecuMbHIInfo = Just x }
 
-{-# LINE 658 "src/ehc/EHC/CompileUnit.chs" #-}
+{-# LINE 710 "src/ehc/EHC/CompileUnit.chs" #-}
 ecuStoreCoreTime :: EcuUpdater ClockTime
-ecuStoreCoreTime x ecu = ecu { ecuMbCoreTime = Just x }
+ecuStoreCoreTime x ecu = ecu { _ecuMbCoreTime = Just x }
 
-{-# LINE 663 "src/ehc/EHC/CompileUnit.chs" #-}
+{-# LINE 715 "src/ehc/EHC/CompileUnit.chs" #-}
 ecuStoreCoreRunTime :: EcuUpdater ClockTime
-ecuStoreCoreRunTime x ecu = ecu { ecuMbCoreRunTime = Just x }
+ecuStoreCoreRunTime x ecu = ecu { _ecuMbCoreRunTime = Just x }
 
-{-# LINE 673 "src/ehc/EHC/CompileUnit.chs" #-}
+{-# LINE 725 "src/ehc/EHC/CompileUnit.chs" #-}
 ecuStoreDirIsWritable :: EcuUpdater Bool
 ecuStoreDirIsWritable x ecu = ecu { ecuDirIsWritable = x }
 
-{-# LINE 678 "src/ehc/EHC/CompileUnit.chs" #-}
+{-# LINE 730 "src/ehc/EHC/CompileUnit.chs" #-}
 ecuStoreOpts :: EcuUpdater EHCOpts
 ecuStoreOpts x ecu = ecu { ecuMbOpts = Just x }
 
@@ -413,42 +473,42 @@
 ecuStoreUsedNames :: EcuUpdater ModEntRelFilterMp
 ecuStoreUsedNames x ecu = ecu { ecuUsedNames = x }
 
-{-# LINE 692 "src/ehc/EHC/CompileUnit.chs" #-}
+{-# LINE 744 "src/ehc/EHC/CompileUnit.chs" #-}
 ecuStoreGenCodeFiles :: EcuUpdater [FPath]
 ecuStoreGenCodeFiles x ecu = ecu { ecuGenCodeFiles = x }
 
-{-# LINE 697 "src/ehc/EHC/CompileUnit.chs" #-}
+{-# LINE 749 "src/ehc/EHC/CompileUnit.chs" #-}
 ecuStoreSeqNr :: EcuUpdater EHCCompileSeqNr
 ecuStoreSeqNr x ecu = ecu { ecuSeqNr = x }
 
 ecuStoreCppFilePath :: EcuUpdater FPath
 ecuStoreCppFilePath x ecu = ecu { ecuMbCppFilePath = Just x }
 
-{-# LINE 709 "src/ehc/EHC/CompileUnit.chs" #-}
+{-# LINE 761 "src/ehc/EHC/CompileUnit.chs" #-}
 -- | Has the source file the given extension? Given suffix is stripped from possible prefixed '.'.
 ecuSrcHasSuffix :: String -> EHCompileUnit -> Bool
 ecuSrcHasSuffix suff ecu
   = maybe False (==suff') $ fpathMbSuff $ ecuSrcFilePath ecu
   where suff' = case suff of {('.':s) -> s; _ -> suff}
 
-{-# LINE 717 "src/ehc/EHC/CompileUnit.chs" #-}
+{-# LINE 769 "src/ehc/EHC/CompileUnit.chs" #-}
 -- | Is HS newer?
 --   If no HS exists False is returned.
 ecuIsHSNewerThanHI :: EHCompileUnit -> Bool
 ecuIsHSNewerThanHI ecu
-  = case (ecuMbSrcTime ecu,ecuMbHIInfoTime ecu) of
+  = case (_ecuMbSrcTime ecu,_ecuMbHIInfoTime ecu) of
       (Just ths,Just thi) -> ths `diffClockTimes` thi > noTimeDiff
       (Nothing ,Just thi) -> False
       _                   -> True
 
-{-# LINE 736 "src/ehc/EHC/CompileUnit.chs" #-}
+{-# LINE 788 "src/ehc/EHC/CompileUnit.chs" #-}
 ecuIsValidHIInfo :: EHCompileUnit -> Bool
 ecuIsValidHIInfo ecu
-  = case ecuMbPrevHIInfo ecu of
+  = case _ecuMbPrevHIInfo ecu of
       Just i -> HI.hiiValidity i == HI.HIValidity_Ok
       _      -> False
 
-{-# LINE 744 "src/ehc/EHC/CompileUnit.chs" #-}
+{-# LINE 796 "src/ehc/EHC/CompileUnit.chs" #-}
 -- | Can HI be used instead of HS?
 --   This is purely based on HI being of the right version and HS not newer.
 --   The need for recompilation considers dependencies on imports as well.
@@ -456,3 +516,7 @@
 ecuCanUseHIInsteadOfHS ecu
   = ecuIsValidHIInfo ecu && not (ecuIsHSNewerThanHI ecu)
 
+{-# LINE 805 "src/ehc/EHC/CompileUnit.chs" #-}
+-- | Compilation can actually be done?
+ecuCanCompile :: EHCompileUnit -> Bool
+ecuCanCompile ecu = isJust (_ecuMbSrcTime ecu) && ecuDirIsWritable ecu
diff --git a/src/UHC/Light/Compiler/EHC/FileSuffMp.hs b/src/UHC/Light/Compiler/EHC/FileSuffMp.hs
new file mode 100644
--- /dev/null
+++ b/src/UHC/Light/Compiler/EHC/FileSuffMp.hs
@@ -0,0 +1,44 @@
+module UHC.Light.Compiler.EHC.FileSuffMp
+( FileSuffMp, emptyFileSuffMp, mkFileSuffMpHs
+, fileSuffMpHsNoSuff )
+where
+import qualified UHC.Light.Compiler.Config as Cfg
+import UHC.Light.Compiler.Base.Target
+import UHC.Light.Compiler.EHC.Common
+
+{-# LINE 26 "src/ehc/EHC/FileSuffMp.chs" #-}
+type FileSuffMp =
+  [( FileSuffix				-- suffix
+   , FileSuffInitState
+   , Bool					-- visible from commandline
+   )]
+
+emptyFileSuffMp :: FileSuffMp
+emptyFileSuffMp = []
+
+-- | Allowed suffixes, order is significant.
+mkFileSuffMpHs :: EHCOpts -> FileSuffMp
+mkFileSuffMpHs opts
+  = [ ( Just "hs"  , (ECUS_Haskell HSStart, ASTType_HS, ASTFileContent_Text, ASTFileUse_Src), True )
+    , ( Just "lhs" , (ECUS_Haskell LHSStart, ASTType_HS, ASTFileContent_LitText, ASTFileUse_Src), True )
+    , ( Just "eh"  , (ECUS_Eh EHStart, ASTType_EH, ASTFileContent_Text, ASTFileUse_Src), True )
+    , ( Just "hi"  , (ECUS_Haskell HIStart, ASTType_HI, ASTFileContent_Binary, ASTFileUse_Cache), False )
+    , ( Just Cfg.suffixDotlessBinaryCoreRun , (ECUS_CoreRun CRRStartBinary, ASTType_CoreRun, ASTFileContent_Binary, ASTFileUse_Src), True )
+    , ( Just Cfg.suffixDotlessInputOutputTextualCore, (ECUS_Core CRStartText, ASTType_Core, ASTFileContent_Text, ASTFileUse_Src), True   )
+    , ( Just Cfg.suffixDotlessInputOutputBinaryCore , (ECUS_Core CRStartBinary, ASTType_Core, ASTFileContent_Binary, ASTFileUse_Src), True )
+    , ( Just Cfg.suffixDotlessBinaryCore , (ECUS_Core CRStartBinary, ASTType_Core, ASTFileContent_Binary, ASTFileUse_Src), False )
+    ]
+    ++ (if targetIsOnUnixAndOrC (ehcOptTarget opts)
+        then [ ( Just "c"   , (ECUS_C CStart, ASTType_C, ASTFileContent_Text, ASTFileUse_Src), True )
+             , ( Just "o"   , (ECUS_O OStart, ASTType_O, ASTFileContent_Binary, ASTFileUse_Src), True )
+             ]
+        else []
+       )
+
+{-# LINE 72 "src/ehc/EHC/FileSuffMp.chs" #-}
+-- Suffix map for empty suffix, defaults to .hs
+fileSuffMpHsNoSuff :: FileSuffMp
+fileSuffMpHsNoSuff
+  = [ ( Nothing  , (ECUS_Haskell HSStart, ASTType_HS, ASTFileContent_Text, ASTFileUse_Src), False )
+    ]
+
diff --git a/src/UHC/Light/Compiler/EHC/Main.hs b/src/UHC/Light/Compiler/EHC/Main.hs
--- a/src/UHC/Light/Compiler/EHC/Main.hs
+++ b/src/UHC/Light/Compiler/EHC/Main.hs
@@ -20,8 +20,11 @@
 import qualified Data.Set as Set
 import Control.Monad.State
 import Control.Monad.Error
+import UHC.Util.Lens
+import UHC.Light.Compiler.EHC.BuildFunction
 import UHC.Light.Compiler.Base.Target
 import UHC.Light.Compiler.Base.Optimize (allOptimizeMp)
+import UHC.Light.Compiler.EHC.Main.Compile
 import qualified UHC.Light.Compiler.SourceCodeSig as Sig
 import UHC.Light.Compiler.EHC.CompilePhase.Module
 import UHC.Light.Compiler.Module.ImportExport (modBuiltin)
@@ -43,7 +46,9 @@
 
 
 
-{-# LINE 96 "src/ehc/EHC/Main.chs" #-}
+
+
+{-# LINE 104 "src/ehc/EHC/Main.chs" #-}
 mainEHC :: EHCOpts -> IO ()
 mainEHC opts0
   =  do  {  args      <- getArgs
@@ -93,12 +98,12 @@
          }
   where envkey opts = mkEhcenvKey (Cfg.verFull Cfg.version) (fpathToStr $ ehcProgName opts) Cfg.ehcDefaultVariant
 
-{-# LINE 191 "src/ehc/EHC/Main.chs" #-}
+{-# LINE 199 "src/ehc/EHC/Main.chs" #-}
 defaultEHCEnvironment :: EHCEnvironment
 defaultEHCEnvironment
   = EHCEnvironment Cfg.ehcDefaultVariant Cfg.ehcDefaultInplaceInstallDir
 
-{-# LINE 269 "src/ehc/EHC/Main.chs" #-}
+{-# LINE 277 "src/ehc/EHC/Main.chs" #-}
 doCompilePrepare :: [String] -> EHCOpts -> IO (Maybe (EHCOpts,[FPath],[HsName],EHCompileRun))
 doCompilePrepare fnL@(fn:_) opts
   = do { let fpL@(fp:_)             = map (mkTopLevelFPath "hs") fnL
@@ -153,9 +158,9 @@
                                     }
 {- this does not work in ghc 6.8.2
              crsi           = emptyEHCompileRunStateInfo
-                                { crsiOpts       =   opts3
-                                , crsiHSInh      =   initialHSSem opts3
-                                , crsiEHInh      =   initialEHSem opts3 fp
+                                { _crsiOpts       =   opts3
+                                , _crsiHSInh      =   initialHSSem opts3
+                                , _crsiEHInh      =   initialEHSem opts3 fp
                                 , crsiCoreInh    =   initialCore2GrSem opts3
                                 -- , crsiHIInh      =   initialHISem opts3
                                 , crsiHSModInh   =   initialHSSemMod opts3
@@ -165,6 +170,7 @@
                                                        uidStart uidStart
                                                        (initialHSSem opts3)
                                                        (initialEHSem opts3 fp)
+                                                       (mkFileSuffMpHs opts3)
                                                        (initialCore2GrSem opts3)
                                                        initialCore2CoreRunSem
                                                        Nothing
@@ -173,6 +179,7 @@
                                                        Map.empty Map.empty defaultOptim
                                                        Map.empty
                                                        ehcioinfo []
+                                                       emptyBState
                                 )
              initialState   = mkEmptyCompileRun topModNm crsi
        ; return $ Just (opts3,fpL,topModNmL,initialState)
@@ -188,18 +195,23 @@
                         , initialState
                         ) = fromJust mbPrep
                        searchPath = ehcOptImportFileLocPath opts
-                       fileSuffMpHs = mkFileSuffMpHs opts
+                       fileSuffMpHs = initialState ^. crStateInfo ^. crsiFileSuffMp
                  ; when (ehcOptVerbosity opts >= VerboseDebug)
                         (putStrLn $ "search path: " ++ show searchPath)
                  ; _ <- if False -- ehcOptPriv opts
                         then run initialState $ compile2 opts fileSuffMpHs searchPath fpL topModNmL
-                        else run initialState $ compile  opts fileSuffMpHs searchPath fpL topModNmL
+                        else if ehcOptAltDriver opts
+                        then run initialState $ compileN_Alternate fpL topModNmL
+                        else run initialState $ compileN  opts fileSuffMpHs searchPath fpL topModNmL
                  ; return ()
                  }
          else exitFailure
        }
   where -- run s c = {- runErrorT $ -} runStateT (runCompilePhaseT c) s
         run s c = runStateT (runCompilePhaseT c) s
+        -- init (to be moved elsewhere, TBD)
+        -- initOther fileSuffMpHs = crsiFileSuffMp =: fileSuffMpHs
+        -- experimental stuff trying to deal with orphan instances, ignore
         -- compile2 :: EHCCompileRunner m => EHCOpts -> FileSuffMp -> FileLocPath -> [FPath] -> [HsName] -> EHCompilePhaseT m ()
         compile2 :: EHCOpts -> FileSuffMp -> FileLocPath -> [FPath] -> [HsName] -> EHCompilePhase ()
         compile2 opts fileSuffMpHs searchPath fpL topModNmL
@@ -212,10 +224,10 @@
                ; return ()
                }
           where toplayer fpL topModNmL
-                  = zipWithM (\fp topModNm -> imp1 opts fileSuffMpHs searchPath (ECUS_Haskell HSOnlyImports) (Just fp) Nothing topModNm) fpL topModNmL
+                  = zipWithM (\fp topModNm -> import1 opts fileSuffMpHs searchPath (ECUS_Haskell HSOnlyImports) (Just fp) Nothing topModNm) fpL topModNmL
                 onelayer
                   = do { cr <- get
-                       ; let modNmS = Map.keysSet $ crCUCache cr
+                       ; let modNmS = Map.keysSet $ _crCUCache cr
                              ms = Set.unions
                                     [ case cuState e of
                                         -- ECUS_Haskell HIOnlyImports -> ecuTransClosedOrphanModS ecu
@@ -224,7 +236,7 @@
                                     ]
                                   `Set.difference` modNmS
                        ; sequence -- or: cpSeq + return ()
-                           [ do { i@(m',_) <- imp1 opts fileSuffMpHs searchPath (ECUS_Haskell HSOnlyImports) Nothing Nothing m
+                           [ do { i@(m',_) <- import1 opts fileSuffMpHs searchPath (ECUS_Haskell HSOnlyImports) Nothing Nothing m
                                 -- ; cpEhcFullProgModuleDetermineNeedsCompile m'
                                 ; return i
                                 }
@@ -236,96 +248,7 @@
                 {-
                 showCompileOrder
                   = do { cr <- get
-                       ; liftIO $ putStrLn $ "compile order: " ++ show (crCompileOrder cr)
+                       ; liftIO $ putStrLn $ "compile order: " ++ show (_crCompileOrder cr)
                        }
                 -}
-
-        -- compile :: EHCCompileRunner m => EHCOpts -> FileSuffMp -> FileLocPath -> [FPath] -> [HsName] -> EHCompilePhaseT m ()
-        compile :: EHCOpts -> FileSuffMp -> FileLocPath -> [FPath] -> [HsName] -> EHCompilePhase ()
-        compile opts fileSuffMpHs searchPath fpL topModNmL@(modNm:_)
-          = do { cpMsg modNm VerboseDebug $ "doCompileRun.compile topModNmL: " ++ show topModNmL
-
-               -- check module import relationship for builtin module
-               ; cpCheckModsModWith (const emptyModMpInfo) [modBuiltin]
-
-               -- start with directly importing top modules, providing the filepath directly
-               ; topModNmL' <- zipWithM (\fp topModNm -> imp (ECUS_Haskell HSOnlyImports) (Just fp) Nothing topModNm) fpL topModNmL
-
-               -- follow the import relation to chase modules which have to be analysed
-               ; cpImportGatherFromModsWithImp
-                   (if ehcOptPriv opts
-                    then \ecu -> case ecuState ecu of
-                                   -- ECUS_Haskell HIStart -> Set.toList $ ecuTransClosedOrphanModS ecu
-                                   ECUS_Haskell HIOnlyImports -> [] -- Set.toList $ ecuTransClosedOrphanModS ecu
-                                   _ -> ecuImpNmL ecu
-                    else ecuImpNmL
-                   )
-                   (imp (ECUS_Haskell HSOnlyImports) Nothing) (map fst topModNmL')
-
-               -- import orphans
-               ; when (ehcOptPriv opts)
-                      (do {
-                          -- import orphans
-                            importAlso (ECUS_Haskell HSOnlyImports) ecuTransClosedOrphanModS
-
-                          -- import used remaining modules, but just minimally
-                          ; importAlso (ECUS_Haskell HMOnlyMinimal) (Set.unions . Map.elems . ecuTransClosedUsedModMp)
-                          })
-
-               -- inhibit mutual recursiveness
-               ; cpEhcCheckAbsenceOfMutRecModules
-
-               -- and compile it all
-               ; cpEhcFullProgCompileAllModules
-               -- cleanup
-               ; unless (ehcOptKeepIntermediateFiles opts) cpRmFilesToRm
-               }
-          where -- abbrev for imp1
-                imp = imp1 opts fileSuffMpHs searchPath
-
-                -- import others, but then in a (slightly) different way
-                -- importAlso :: EHCCompileRunner m => EHCompileUnitState -> (EHCompileUnit -> Set.Set HsName) -> EHCompilePhaseT m ()
-                importAlso :: EHCompileUnitState -> (EHCompileUnit -> Set.Set HsName) -> EHCompilePhase ()
-                importAlso how getNms
-                  = do { cr <- get
-                       ; let allAnalysedModS = Map.keysSet $ crCUCache cr
-                             allNewS         = Set.unions [ getNms $ crCU m cr | m <- Set.toList allAnalysedModS ] `Set.difference` allAnalysedModS
-                       ; cpImportGatherFromModsWithImp
-                           (const [])
-                           (imp how Nothing) (Set.toList allNewS)
-                       }
-
-        -- imp1 :: EHCCompileRunner m => EHCOpts -> FileSuffMp -> FileLocPath -> EHCompileUnitState -> Maybe FPath -> Maybe (HsName,(FPath,FileLoc)) -> HsName -> EHCompilePhaseT m (HsName,Maybe (HsName,(FPath,FileLoc)))
-        imp1 :: EHCOpts -> FileSuffMp -> FileLocPath -> EHCompileUnitState -> Maybe FPath -> Maybe (HsName,(FPath,FileLoc)) -> HsName -> EHCompilePhase (HsName,Maybe (HsName,(FPath,FileLoc)))
-        imp1 opts fileSuffMpHs searchPath desiredState mbFp mbPrev nm
-          = do { let isTopModule = isJust mbFp
-                     fileSuffMpHs' = map tup123to12 $ (if isTopModule then fileSuffMpHsNoSuff else []) ++ fileSuffMpHs
-               ; let searchPath' = adaptedSearchPath mbPrev
-               ; fpsFound <- cpFindFilesForFPathInLocations (fileLocSearch opts) (\(x,_,_) -> x) False fileSuffMpHs' searchPath' (Just nm) mbFp
-               ; when (ehcOptVerbosity opts >= VerboseDebug)
-                      (do { liftIO $ putStrLn $ show nm ++ ": " ++ show (fmap fpathToStr mbFp) ++ ": " ++ show (map fpathToStr fpsFound)
-                          ; liftIO $ putStrLn $ "searchPath: " ++ show searchPath'
-                          })
-               ; when isTopModule
-                      (cpUpdCU nm (ecuSetIsTopMod True))
-               ; cpUpdCU nm (ecuSetTarget (ehcOptTarget opts))
-               ; case fpsFound of
-                   (fp:_)
-                     -> do { nm' <- cpEhcModuleCompile1 (Just desiredState) nm
-                           ; cr <- get
-                           ; let (ecu,_,_,_) = crBaseInfo nm' cr
-                           ; return (nm',Just (nm',(fp, ecuFileLocation ecu)))
-                           }
-                   _ -> return (nm,Nothing)
-               }
-          where -- strip tail part corresponding to module name, and use it to search as well
-                adaptedSearchPath (Just (prevNm,(prevFp,prevLoc)))
-                  = case (fpathMbDir (mkFPath prevNm), fpathMbDir prevFp, prevLoc) of
-                      (_, _, p) | filelocIsPkg p
-                        -> p : searchPath
-                      (Just n, Just p, _)
-                        -> mkDirFileLoc (filePathUnPrefix prefix) : searchPath
-                        where (prefix,_) = splitAt (length p - length n) p
-                      _ -> searchPath
-                adaptedSearchPath _ = searchPath
 
diff --git a/src/UHC/Light/Compiler/EHC/Main/Compile.hs b/src/UHC/Light/Compiler/EHC/Main/Compile.hs
new file mode 100644
--- /dev/null
+++ b/src/UHC/Light/Compiler/EHC/Main/Compile.hs
@@ -0,0 +1,139 @@
+module UHC.Light.Compiler.EHC.Main.Compile
+( compileN_Alternate
+, compileN
+, import1 )
+where
+import System.Console.GetOpt
+import System.IO
+import System.Exit
+import System.Process
+import System.Environment
+import qualified Control.Exception as CE
+import qualified UHC.Light.Compiler.Config as Cfg
+import UHC.Light.Compiler.EHC.Common
+import UHC.Light.Compiler.EHC.Environment
+import UHC.Light.Compiler.EHC.CompileUnit
+import UHC.Light.Compiler.EHC.CompileRun
+import UHC.Light.Compiler.EHC.InitialSetup
+import UHC.Light.Compiler.EHC.CompilePhase.TopLevelPhases
+import UHC.Light.Compiler.EHC.BuildFunction.Run
+import qualified Debug.Trace
+import qualified Data.Map as Map
+import qualified Data.Set as Set
+import Control.Monad.State
+import Control.Monad.Error
+import UHC.Light.Compiler.Base.Target
+import UHC.Light.Compiler.Base.Optimize (allOptimizeMp)
+import UHC.Light.Compiler.EHC.Main.Utils
+import qualified UHC.Light.Compiler.SourceCodeSig as Sig
+import UHC.Light.Compiler.EHC.CompilePhase.Module
+import UHC.Light.Compiler.Module.ImportExport (modBuiltin)
+import UHC.Light.Compiler.Module.ImportExport
+import System.Directory
+import UHC.Light.Compiler.Base.PackageDatabase
+import UHC.Light.Compiler.Base.Parser2
+import qualified UHC.Light.Compiler.ConfigCabal as Cfg (getDataDir)
+
+
+
+
+
+
+
+
+
+
+
+{-# LINE 86 "src/ehc/EHC/Main/Compile.chs" #-}
+compileN_Alternate :: EHCCompileRunner m => [FPath] -> [HsName] -> EHCompilePhaseT m ()
+compileN_Alternate fpL topModNmL@(modNm:_) = do
+    cpMsg modNm VerboseDebug $ "compileN_Alternate topModNmL: " ++ show topModNmL
+    zipWithM (\fp topModNm -> bcall $ EcuOfNameAndPath Nothing (topModNm, Just fp)) fpL topModNmL
+    return ()
+
+{-# LINE 95 "src/ehc/EHC/Main/Compile.chs" #-}
+compileN :: EHCCompileRunner m => EHCOpts -> FileSuffMp -> FileLocPath -> [FPath] -> [HsName] -> EHCompilePhaseT m ()
+compileN opts fileSuffMpHs searchPath fpL topModNmL@(modNm:_)
+  = do { cpMsg modNm VerboseDebug $ "compileN topModNmL: " ++ show topModNmL
+
+       -- check module import relationship for builtin module
+       ; cpCheckModsModWith (const emptyModMpInfo) [modBuiltin]
+
+       -- start with directly importing top modules, providing the filepath directly
+       ; topModNmL' <- zipWithM (\fp topModNm -> imp (ECUS_Haskell HSOnlyImports) (Just fp) Nothing topModNm) fpL topModNmL
+
+       -- follow the import relation to chase modules which have to be analysed
+       ; cpImportGatherFromModsWithImp
+           (if ehcOptPriv opts
+            then \ecu -> case ecuState ecu of
+                           -- ECUS_Haskell HIStart -> Set.toList $ ecuTransClosedOrphanModS ecu
+                           ECUS_Haskell HIOnlyImports -> [] -- Set.toList $ ecuTransClosedOrphanModS ecu
+                           _ -> ecuImpNmL ecu
+            else ecuImpNmL
+           )
+           (imp (ECUS_Haskell HSOnlyImports) Nothing) (map fst topModNmL')
+
+       -- import orphans
+       ; when (ehcOptPriv opts)
+              (do {
+                  -- import orphans
+                    importAlso (ECUS_Haskell HSOnlyImports) ecuTransClosedOrphanModS
+
+                  -- import used remaining modules, but just minimally
+                  ; importAlso (ECUS_Haskell HMOnlyMinimal) (Set.unions . Map.elems . ecuTransClosedUsedModMp)
+                  })
+
+       -- inhibit mutual recursiveness
+       ; cpEhcCheckAbsenceOfMutRecModules
+
+       -- and compile it all
+       ; cpEhcFullProgCompileAllModules
+       -- cleanup
+       ; unless (ehcOptKeepIntermediateFiles opts) cpRmFilesToRm
+       }
+  where -- abbrev for import1
+        imp = import1 opts fileSuffMpHs searchPath
+
+        -- import others, but then in a (slightly) different way
+        importAlso how getNms
+          = do { cr <- get
+               ; let allAnalysedModS = Map.keysSet $ _crCUCache cr
+                     allNewS         = Set.unions [ getNms $ crCU m cr | m <- Set.toList allAnalysedModS ] `Set.difference` allAnalysedModS
+               ; cpImportGatherFromModsWithImp
+                   (const [])
+                   (imp how Nothing) (Set.toList allNewS)
+               }
+
+{-# LINE 152 "src/ehc/EHC/Main/Compile.chs" #-}
+import1
+  :: EHCCompileRunner m
+  => EHCOpts
+     -> FileSuffMp
+     -> FileLocPath
+     -> EHCompileUnitState
+     -> Maybe FPath
+     -> Maybe PrevSearchInfo
+     -> HsName
+     -> EHCompilePhaseT m (HsName,Maybe PrevSearchInfo)
+import1 opts fileSuffMpHs searchPath desiredState mbFp mbPrev nm
+  = do { let isTopModule = isJust mbFp
+             fileSuffMpHs' = map tup123to12 $ (if isTopModule then fileSuffMpHsNoSuff else []) ++ fileSuffMpHs
+       ; let searchPath' = prevSearchInfoAdaptedSearchPath mbPrev searchPath
+       ; fpsFound <- cpFindFilesForFPathInLocations (fileLocSearch opts) (\(x,_,_) -> x) False fileSuffMpHs' searchPath' (Just nm) mbFp
+       ; when (ehcOptVerbosity opts >= VerboseDebug)
+              (do { liftIO $ putStrLn $ show nm ++ ": " ++ show (fmap fpathToStr mbFp) ++ ": " ++ show (map fpathToStr fpsFound)
+                  ; liftIO $ putStrLn $ "searchPath: " ++ show searchPath'
+                  })
+       ; when isTopModule
+              (cpUpdCU nm (ecuSetIsTopMod True))
+       ; cpUpdCU nm (ecuSetTarget (ehcOptTarget opts))
+       ; case fpsFound of
+           (fp:_)
+             -> do { nm' <- cpEhcModuleCompile1 (Just desiredState) nm
+                   ; cr <- get
+                   ; let (ecu,_,_,_) = crBaseInfo nm' cr
+                   ; return (nm',Just (nm',(fp, ecuFileLocation ecu)))
+                   }
+           _ -> return (nm,Nothing)
+       }
+
diff --git a/src/UHC/Light/Compiler/EHC/Main/Utils.hs b/src/UHC/Light/Compiler/EHC/Main/Utils.hs
--- a/src/UHC/Light/Compiler/EHC/Main/Utils.hs
+++ b/src/UHC/Light/Compiler/EHC/Main/Utils.hs
@@ -1,9 +1,10 @@
 module UHC.Light.Compiler.EHC.Main.Utils
-( module UHC.Light.Compiler.Opts
-, handleImmQuitOption
-, FileSuffMp, mkFileSuffMpHs, fileSuffMpHsNoSuff )
+( module UHC.Light.Compiler.EHC.FileSuffMp
+, module UHC.Light.Compiler.Opts
+, handleImmQuitOption )
 where
 import UHC.Light.Compiler.EHC.Common
+import UHC.Light.Compiler.EHC.FileSuffMp
 import qualified UHC.Light.Compiler.Config as Cfg
 import UHC.Light.Compiler.Opts
 import System.Console.GetOpt
@@ -67,37 +68,4 @@
         -> do { let d = Cfg.mkInstallPkgdirUser opts
               ; putStrLn d
               }
-
-{-# LINE 107 "src/ehc/EHC/Main/Utils.chs" #-}
-type FileSuffMp =
-  [( FileSuffix				-- suffix
-   , EHCompileUnitState		-- initial state
-   , Bool					-- visible from commandline
-   )]
-
--- | Allowed suffixes, order is significant.
-mkFileSuffMpHs :: EHCOpts -> FileSuffMp
-mkFileSuffMpHs opts
-  = [ ( Just "hs"  , ECUS_Haskell HSStart, True )
-    , ( Just "lhs" , ECUS_Haskell LHSStart, True )
-    , ( Just "eh"  , ECUS_Eh EHStart, True )
-    , ( Just "hi"  , ECUS_Haskell HIStart, False )
-    , ( Just Cfg.suffixDotlessBinaryCoreRun , ECUS_CoreRun CRRStartBinary, True )
-    , ( Just Cfg.suffixDotlessInputOutputTextualCore, ECUS_Core CRStartText, True   )
-    , ( Just Cfg.suffixDotlessInputOutputBinaryCore , ECUS_Core CRStartBinary, True )
-    , ( Just Cfg.suffixDotlessBinaryCore , ECUS_Core CRStartBinary, False )
-    ]
-    ++ (if targetIsOnUnixAndOrC (ehcOptTarget opts)
-        then [ ( Just "c"   , ECUS_C CStart, True )
-             , ( Just "o"   , ECUS_O OStart, True )
-             ]
-        else []
-       )
-
-{-# LINE 150 "src/ehc/EHC/Main/Utils.chs" #-}
--- Suffix map for empty suffix, defaults to .hs
-fileSuffMpHsNoSuff :: FileSuffMp
-fileSuffMpHsNoSuff
-  = [ ( Nothing  , ECUS_Haskell HSStart, False )
-    ]
 
diff --git a/src/UHC/Light/Compiler/Foreign.hs b/src/UHC/Light/Compiler/Foreign.hs
--- a/src/UHC/Light/Compiler/Foreign.hs
+++ b/src/UHC/Light/Compiler/Foreign.hs
@@ -14,10 +14,6 @@
 import Control.Monad
 import UHC.Util.Binary
 import UHC.Util.Serialize
-import Data.Typeable (Typeable)
-import Data.Generics (Data)
-
-
 
 
 
diff --git a/src/UHC/Light/Compiler/HI.hs b/src/UHC/Light/Compiler/HI.hs
--- a/src/UHC/Light/Compiler/HI.hs
+++ b/src/UHC/Light/Compiler/HI.hs
@@ -35,8 +35,6 @@
 import UHC.Util.Utils
 import Control.Monad
 import UHC.Util.Binary
-import Data.Typeable (Typeable)
-import Data.Generics (Data)
 import UHC.Util.Serialize
 import qualified UHC.Light.Compiler.Config as Cfg
 import qualified UHC.Light.Compiler.ConfigInternalVersions as Cfg
diff --git a/src/UHC/Light/Compiler/HS.hs b/src/UHC/Light/Compiler/HS.hs
--- a/src/UHC/Light/Compiler/HS.hs
+++ b/src/UHC/Light/Compiler/HS.hs
@@ -73,6 +73,10 @@
 
 
 
+deriving instance Typeable AGItf
+
+
+
 type Name = HsName
 type Names = [Name]
 type MaybeName = Maybe Name
diff --git a/src/UHC/Light/Compiler/LamInfo.hs b/src/UHC/Light/Compiler/LamInfo.hs
--- a/src/UHC/Light/Compiler/LamInfo.hs
+++ b/src/UHC/Light/Compiler/LamInfo.hs
@@ -24,12 +24,10 @@
 import qualified Data.Set as Set
 import Control.Monad
 import UHC.Util.Serialize
-import Data.Typeable
-import Data.Generics (Data)
 
 
 
-{-# LINE 68 "src/ehc/LamInfo.chs" #-}
+{-# LINE 66 "src/ehc/LamInfo.chs" #-}
 data StackTraceInfo
   = StackTraceInfo_None
   | StackTraceInfo_HasStackTraceEquiv	HsName		-- has a stack traced equivalent
@@ -38,7 +36,7 @@
            , Data, Typeable
            )
 
-{-# LINE 80 "src/ehc/LamInfo.chs" #-}
+{-# LINE 78 "src/ehc/LamInfo.chs" #-}
 -- | The role a value takes in fusion
 data FusionRole
   = FusionRole_Fuse			-- fuse this, i.e. inline, turned on by 'fuse f' for f
@@ -48,12 +46,12 @@
            , Data,Typeable
            )
 
-{-# LINE 91 "src/ehc/LamInfo.chs" #-}
+{-# LINE 89 "src/ehc/LamInfo.chs" #-}
 instance PP FusionRole where
   pp r = pp $ drop l $ show r
        where l = length "FusionRole_"
 
-{-# LINE 97 "src/ehc/LamInfo.chs" #-}
+{-# LINE 95 "src/ehc/LamInfo.chs" #-}
 -- | per aspect info
 data LamInfoBindAsp
   = LamInfoBindAsp_RelevTy							-- relevance typing
@@ -75,14 +73,14 @@
 
 type LamInfoBindAspMp = Map.Map ACoreBindAspectKeyS LamInfoBindAsp
 
-{-# LINE 129 "src/ehc/LamInfo.chs" #-}
+{-# LINE 127 "src/ehc/LamInfo.chs" #-}
 instance PP LamInfoBindAsp where
   pp (LamInfoBindAsp_RelevTy 	t) = "RTy"  >#< pp t
   pp (LamInfoBindAsp_Ty      	t) = "Ty"   >#< pp t
   pp (LamInfoBindAsp_Core    ml	c) = pp "Core" -- >#< pp c -- Core.Pretty uses LamInfo, so module cycle...
   pp (LamInfoBindAsp_FusionRole	r) = "Fuse" >#< pp r
 
-{-# LINE 139 "src/ehc/LamInfo.chs" #-}
+{-# LINE 137 "src/ehc/LamInfo.chs" #-}
 -- | per lambda implementation info
 data LamInfo
   = LamInfo
@@ -104,22 +102,22 @@
   = LamInfo 0 StackTraceInfo_None
             Map.empty
 
-{-# LINE 173 "src/ehc/LamInfo.chs" #-}
+{-# LINE 171 "src/ehc/LamInfo.chs" #-}
 instance PP LamInfo where
   pp (LamInfo {laminfoBindAspMp=m}) = ppAssocL $ assocLMapKey ppACBaspKeyS $ Map.toList m
 
-{-# LINE 178 "src/ehc/LamInfo.chs" #-}
+{-# LINE 176 "src/ehc/LamInfo.chs" #-}
 laminfo1stArgIsStackTrace :: LamInfo -> Bool
 laminfo1stArgIsStackTrace (LamInfo {laminfoStackTrace=StackTraceInfo_IsStackTraceEquiv _}) = True
 laminfo1stArgIsStackTrace _                                                                = False
 
-{-# LINE 190 "src/ehc/LamInfo.chs" #-}
+{-# LINE 188 "src/ehc/LamInfo.chs" #-}
 type LamMp    = Map.Map HsName LamInfo
 
 emptyLamMp :: LamMp
 emptyLamMp = Map.empty
 
-{-# LINE 197 "src/ehc/LamInfo.chs" #-}
+{-# LINE 195 "src/ehc/LamInfo.chs" #-}
 -- union, including the aspect map, but arbitrary for the info itself
 lamMpUnionBindAspMp :: LamMp -> LamMp -> LamMp
 lamMpUnionBindAspMp = Map.unionWith (\i1 i2 -> i1 {laminfoBindAspMp = laminfoBindAspMp i1 `Map.union` laminfoBindAspMp i2})
@@ -127,7 +125,7 @@
 lamMpUnionsBindAspMp :: [LamMp] -> LamMp
 lamMpUnionsBindAspMp = foldr lamMpUnionBindAspMp Map.empty
 
-{-# LINE 206 "src/ehc/LamInfo.chs" #-}
+{-# LINE 204 "src/ehc/LamInfo.chs" #-}
 -- propagate from new (left) to prev (right), adding new entries if necessary, combining with mergeL2RInfo, finally combining/choosing maps with mergeL2RMp
 lamMpMergeInto :: (LamInfo -> LamInfo -> LamInfo) -> (LamMp -> LamMp -> LamMp) -> LamMp -> LamMp -> LamMp
 lamMpMergeInto mergeL2RInfo mergeL2RMp newMp prevMp
@@ -137,7 +135,7 @@
               (\n i -> maybe i (mergeL2RInfo i) $ Map.lookup n prevMp
               ) newMp
 
-{-# LINE 228 "src/ehc/LamInfo.chs" #-}
+{-# LINE 226 "src/ehc/LamInfo.chs" #-}
 lamMpLookupAsp :: HsName -> ACoreBindAspectKeyS -> LamMp -> Maybe LamInfoBindAsp
 lamMpLookupAsp n a m
   = fmap snd $ mapLookup2' laminfoBindAspMp n a m
@@ -159,14 +157,14 @@
         -> Just a
       _ -> Nothing
 
-{-# LINE 251 "src/ehc/LamInfo.chs" #-}
+{-# LINE 249 "src/ehc/LamInfo.chs" #-}
 lamMpFilterLam :: LamMp -> LamMp
 lamMpFilterLam = Map.filter ((>0) . laminfoArity)
 
 lamMpFilterCaf :: LamMp -> LamMp
 lamMpFilterCaf = Map.filter ((==0) . laminfoArity)
 
-{-# LINE 259 "src/ehc/LamInfo.chs" #-}
+{-# LINE 257 "src/ehc/LamInfo.chs" #-}
 -- | merge info from arbitrary map m into LamMp holding LamInfo's
 lamMpMergeFrom
   :: (LamInfo -> Maybe x)					-- extract relevant info from a LamInfo
@@ -182,16 +180,16 @@
         upd z Nothing  = set (Just (merge z         emptyExtra           )) empty
         emptyExtra = panicJust "lamMpMergeFrom" $ get $ empty
 
-{-# LINE 316 "src/ehc/LamInfo.chs" #-}
+{-# LINE 314 "src/ehc/LamInfo.chs" #-}
 initLamMp :: LamMp
 initLamMp = emptyLamMp
 
-{-# LINE 345 "src/ehc/LamInfo.chs" #-}
+{-# LINE 343 "src/ehc/LamInfo.chs" #-}
 instance Serialize FusionRole where
   sput = sputEnum8
   sget = sgetEnum8
 
-{-# LINE 351 "src/ehc/LamInfo.chs" #-}
+{-# LINE 349 "src/ehc/LamInfo.chs" #-}
 instance Serialize LamInfoBindAsp where
   sput (LamInfoBindAsp_RelevTy  	a) = sputWord8 0 >> sput a
   sput (LamInfoBindAsp_Ty 			a) = sputWord8 1 >> sput a
diff --git a/src/UHC/Light/Compiler/Opts.hs b/src/UHC/Light/Compiler/Opts.hs
--- a/src/UHC/Light/Compiler/Opts.hs
+++ b/src/UHC/Light/Compiler/Opts.hs
@@ -385,12 +385,13 @@
      ,  Option ""   ["version-dotted"]      (NoArg oNumVersion)                     ("print version in \"x.y.z\" style (then stop)")
      ,  Option ""   ["version-asnumber"]    (NoArg oVersionAsNumber)                ("print version in \"xyz\" style (then stop)")
      ,  Option ""   ["numeric-version"]     (NoArg oNumVersion)                     "see --version-dotted (to become obsolete)"
+     ,  Option ""   ["driver-alt"]          (NoArg oAltDriver)                      "driver: use alternate compiler driver (under development)"
      ,  Option "v"  ["verbose"]             (OptArg oVerbose "0|1|2|3|4")           (   "be verbose, 0=quiet, 4=debug, "
                                                                                     ++ "default=1"
                                                                                     )
      ]
 
-{-# LINE 806 "src/ehc/Opts.chs" #-}
+{-# LINE 807 "src/ehc/Opts.chs" #-}
 -- | Help
 oHelp           o =  o { ehcOptImmQuit       = Just ImmediateQuitOption_Help    }
 
@@ -407,11 +408,14 @@
                        Nothing     -> o { ehcOptVerbosity     = succ (ehcOptVerbosity o)}
                        _           -> o
 
-{-# LINE 824 "src/ehc/Opts.chs" #-}
+{-# LINE 825 "src/ehc/Opts.chs" #-}
 oNumVersion            o   = o { ehcOptImmQuit                     = Just ImmediateQuitOption_VersionDotted }
 oVersionAsNumber       o   = o { ehcOptImmQuit                     = Just ImmediateQuitOption_VersionAsNumber }
 
-{-# LINE 833 "src/ehc/Opts.chs" #-}
+{-# LINE 830 "src/ehc/Opts.chs" #-}
+oAltDriver             o   = o { ehcOptAltDriver                   = True }
+
+{-# LINE 838 "src/ehc/Opts.chs" #-}
 -- | Int option
 intArg  tr = ReqArg (optInt tr) "<nr>"
 
@@ -420,7 +424,7 @@
 optInt tr s o
  = tr o $ read s
 
-{-# LINE 843 "src/ehc/Opts.chs" #-}
+{-# LINE 848 "src/ehc/Opts.chs" #-}
 -- | What kind of optional args are allowed
 data OptArgAllow
   = OptArgAllow_Bool
@@ -430,13 +434,13 @@
 optArgAllAllow :: [OptArgAllow]
 optArgAllAllow = [minBound .. maxBound]
 
-{-# LINE 854 "src/ehc/Opts.chs" #-}
+{-# LINE 859 "src/ehc/Opts.chs" #-}
 -- | An optional arg, universal type for all occurring variants
 data OptArg
   = OptArg_Bool     Bool
   | OptArg_Int      Int
 
-{-# LINE 861 "src/ehc/Opts.chs" #-}
+{-# LINE 866 "src/ehc/Opts.chs" #-}
 optArgTake :: [OptArgAllow] -> String -> Maybe (OptArg,String)
 optArgTake allow s
   = case s of
@@ -457,7 +461,7 @@
   where yesInt = OptArgAllow_Int `elem` allow
         noInt  = not yesInt
 
-{-# LINE 883 "src/ehc/Opts.chs" #-}
+{-# LINE 888 "src/ehc/Opts.chs" #-}
 optBooleanTake :: String -> Maybe (Bool,String)
 optBooleanTake s
   = case optArgTake [OptArgAllow_Bool] s of
@@ -473,22 +477,22 @@
 boolArgStr = "Bool"
 boolArg tr = OptArg (optBoolean tr) boolArgStr
 
-{-# LINE 904 "src/ehc/Opts.chs" #-}
+{-# LINE 909 "src/ehc/Opts.chs" #-}
 oPriv                o b = o { ehcOptPriv           = b }
 
-{-# LINE 908 "src/ehc/Opts.chs" #-}
+{-# LINE 913 "src/ehc/Opts.chs" #-}
 optDumpCoreStages    o b = o { ehcOptDumpCoreStages = b }
 
-{-# LINE 916 "src/ehc/Opts.chs" #-}
+{-# LINE 921 "src/ehc/Opts.chs" #-}
 oSetGenTrampoline	 o b = o { ehcOptGenTrampoline_ = b }
 
-{-# LINE 936 "src/ehc/Opts.chs" #-}
+{-# LINE 941 "src/ehc/Opts.chs" #-}
 oStopAtCoreError     o b = o { ehcDebugStopAtCoreError     = b }
 
-{-# LINE 940 "src/ehc/Opts.chs" #-}
+{-# LINE 945 "src/ehc/Opts.chs" #-}
 oStopAtHIError       o b = o { ehcDebugStopAtHIError       = b }
 
-{-# LINE 948 "src/ehc/Opts.chs" #-}
+{-# LINE 953 "src/ehc/Opts.chs" #-}
 -- | Apply the cmdline opts description to a EHCOpts, returning Nothing when there were no options
 cmdlineOptsApply :: [OptDescr (EHCOpts -> EHCOpts)] -> [EHCOpts -> EHCOpts] -> [String] -> EHCOpts -> (Maybe EHCOpts, [String], [String])
 cmdlineOptsApply cmdlopts postopts args opts
@@ -504,7 +508,7 @@
 ehcrunCmdLineOptsApply :: [String] -> EHCOpts -> (Maybe EHCOpts, [String], [String])
 ehcrunCmdLineOptsApply = cmdlineOptsApply ehcrunCmdLineOpts []
 
-{-# LINE 969 "src/ehc/Opts.chs" #-}
+{-# LINE 974 "src/ehc/Opts.chs" #-}
 optsDiscrRecompileRepr :: EHCOpts -> String
 optsDiscrRecompileRepr opts
   = concat
@@ -518,12 +522,12 @@
       ]
   where o m v = if v then m else ""
 
-{-# LINE 990 "src/ehc/Opts.chs" #-}
+{-# LINE 995 "src/ehc/Opts.chs" #-}
 data FIOBind
   = FIOBindYes | FIOBindNoBut TyVarIdS
   deriving (Show)
 
-{-# LINE 996 "src/ehc/Opts.chs" #-}
+{-# LINE 1001 "src/ehc/Opts.chs" #-}
 data FIOpts =  FIOpts   {  fioLeaveRInst     ::  !Bool                ,  fioBindRFirst           ::  !Bool
                         ,  fioBindLFirst     ::  !Bool                ,  fioBindLBeforeR         ::  !Bool
                         ,  fioMode           ::  !FIMode              ,  fioUniq                 ::  !UID
@@ -536,7 +540,7 @@
                         ,  fiMbMkErrClash    ::  Maybe (Ty -> Ty -> Err) -- alternate error construction for type clash
                         }
 
-{-# LINE 1030 "src/ehc/Opts.chs" #-}
+{-# LINE 1035 "src/ehc/Opts.chs" #-}
 fioBindNoSet :: FIOBind -> TyVarIdS
 fioBindNoSet (FIOBindNoBut s) = s
 fioBindNoSet _                = Set.empty
@@ -545,7 +549,7 @@
 fioBindIsYes FIOBindYes = True
 fioBindIsYes _          = False
 
-{-# LINE 1040 "src/ehc/Opts.chs" #-}
+{-# LINE 1045 "src/ehc/Opts.chs" #-}
 strongFIOpts :: FIOpts
 strongFIOpts =  FIOpts  {  fioLeaveRInst     =   False               ,  fioBindRFirst           =   True
                         ,  fioBindLFirst     =   True                ,  fioBindLBeforeR         =   True
@@ -559,11 +563,11 @@
                         ,  fiMbMkErrClash    =   Nothing
                         }
 
-{-# LINE 1070 "src/ehc/Opts.chs" #-}
+{-# LINE 1075 "src/ehc/Opts.chs" #-}
 instance Show FIOpts where
   show o =  "FIOpts"
 
-{-# LINE 1075 "src/ehc/Opts.chs" #-}
+{-# LINE 1080 "src/ehc/Opts.chs" #-}
 instance PP FIOpts where
   pp   o =  "FIOpts{"
             >#< "leaveRInst=" >|< pp (fioLeaveRInst o)
@@ -574,33 +578,33 @@
             >#< "allowRPredElim=" >|< pp (fioAllowRPredElim o)
             >#< "}"
 
-{-# LINE 1091 "src/ehc/Opts.chs" #-}
+{-# LINE 1096 "src/ehc/Opts.chs" #-}
 instLFIOpts :: FIOpts
 instLFIOpts = strongFIOpts {fioBindRFirst = False}
 
-{-# LINE 1096 "src/ehc/Opts.chs" #-}
+{-# LINE 1101 "src/ehc/Opts.chs" #-}
 instLRFIOpts :: FIOpts
 instLRFIOpts = strongFIOpts {fioBindRFirst = False, fioBindLFirst = False}
 
-{-# LINE 1101 "src/ehc/Opts.chs" #-}
+{-# LINE 1106 "src/ehc/Opts.chs" #-}
 unifyFIOpts :: FIOpts
 unifyFIOpts = strongFIOpts {fioMode = FitUnify}
 
 instFIOpts :: FIOpts
 instFIOpts = instLFIOpts {fioLeaveRInst = True, fioBindLFirst = False}
 
-{-# LINE 1120 "src/ehc/Opts.chs" #-}
+{-# LINE 1125 "src/ehc/Opts.chs" #-}
 weakFIOpts :: FIOpts
 weakFIOpts = fioMkWeak strongFIOpts
 
-{-# LINE 1125 "src/ehc/Opts.chs" #-}
+{-# LINE 1130 "src/ehc/Opts.chs" #-}
 predFIOpts :: FIOpts
 predFIOpts = strongFIOpts {fioPredAsTy = True, fioLeaveRInst = True}
 
 implFIOpts  :: FIOpts
 implFIOpts = strongFIOpts {fioAllowRPredElim = False}
 
-{-# LINE 1133 "src/ehc/Opts.chs" #-}
+{-# LINE 1138 "src/ehc/Opts.chs" #-}
 fioSwapOpts :: FIOpts -> FIOpts
 fioSwapOpts fio
   = fio
@@ -614,24 +618,24 @@
 fioSwapPolarity :: Polarity -> FIOpts -> FIOpts
 fioSwapPolarity pol fio = fio {fioMode = fimSwapPol pol (fioMode fio)}
 
-{-# LINE 1150 "src/ehc/Opts.chs" #-}
+{-# LINE 1155 "src/ehc/Opts.chs" #-}
 fioMkStrong :: FIOpts -> FIOpts
 fioMkStrong fi = fi {fioLeaveRInst = False, fioBindRFirst = True, fioBindLFirst = True}
 
-{-# LINE 1155 "src/ehc/Opts.chs" #-}
+{-# LINE 1160 "src/ehc/Opts.chs" #-}
 fioMkWeak :: FIOpts -> FIOpts
 fioMkWeak fi = fi {fioLeaveRInst = True, fioBindRFirst = False}
 
-{-# LINE 1160 "src/ehc/Opts.chs" #-}
+{-# LINE 1165 "src/ehc/Opts.chs" #-}
 -- | Adapt options for extracting final ty
 fioMkFinal :: FIOpts -> FIOpts
 fioMkFinal fi = fi {fioBindLFirst = False, fioBindRFirst = False, fioExpandEqTyVar = True}
 
-{-# LINE 1166 "src/ehc/Opts.chs" #-}
+{-# LINE 1171 "src/ehc/Opts.chs" #-}
 fioMkUnify :: FIOpts -> FIOpts
 fioMkUnify fi = fi {fioMode = FitUnify}
 
-{-# LINE 1175 "src/ehc/Opts.chs" #-}
+{-# LINE 1180 "src/ehc/Opts.chs" #-}
 fioIsSubsume :: FIOpts -> Bool
 fioIsSubsume fio =  case fioMode fio of {FitSubLR -> True ; _ -> False}
 
diff --git a/src/UHC/Light/Compiler/Opts/Base.hs b/src/UHC/Light/Compiler/Opts/Base.hs
--- a/src/UHC/Light/Compiler/Opts/Base.hs
+++ b/src/UHC/Light/Compiler/Opts/Base.hs
@@ -1,3 +1,5 @@
+-- {-# LANGUAGE TemplateHaskell #-}
+
 module UHC.Light.Compiler.Opts.Base
 ( ImmediateQuitOption (..)
 , EHCOpts (..)
@@ -20,6 +22,7 @@
 where
 import UHC.Light.Compiler.Base.Common
 import UHC.Util.Utils
+import Data.Typeable
 import Data.Maybe
 import qualified Data.Map as Map
 import UHC.Util.Pretty
@@ -41,7 +44,7 @@
 
 
 
-{-# LINE 55 "src/ehc/Opts/Base.chs" #-}
+{-# LINE 63 "src/ehc/Opts/Base.chs" #-}
 data ImmediateQuitOption
   = ImmediateQuitOption_Help                                -- print help
   | ImmediateQuitOption_Version                             -- print version info
@@ -56,13 +59,13 @@
   -- -| ImmediateQuitOption_Meta_ExportEnv (Maybe String)       -- export (write) environmental info of installation
   -- -| ImmediateQuitOption_Meta_DirEnv                         -- print dir of environmental info of installation
 
-{-# LINE 79 "src/ehc/Opts/Base.chs" #-}
+{-# LINE 87 "src/ehc/Opts/Base.chs" #-}
 data InOrOutputFor
   = OutputFor_Module
   | OutputFor_Pkg
   | InputFrom_Loc FileLoc
 
-{-# LINE 92 "src/ehc/Opts/Base.chs" #-}
+{-# LINE 100 "src/ehc/Opts/Base.chs" #-}
 -- | Build pkg options, all (except obligatory name) wrapped in Maybe/[] because of possible absence.
 -- 20140829 AD: will be used to construct config file
 data PkgOption
@@ -75,7 +78,7 @@
 emptyPkgOption :: PkgOption
 emptyPkgOption = PkgOption emptyPkgName [] []
 
-{-# LINE 110 "src/ehc/Opts/Base.chs" #-}
+{-# LINE 118 "src/ehc/Opts/Base.chs" #-}
 -- | Core options
 data CoreOpt
   = CoreOpt_NONE				-- no-op option
@@ -92,7 +95,7 @@
   | CoreOpt_RunPPVerbose		-- when dump CoreRun print more verbose info in comment
   deriving (Eq,Enum,Bounded)
 
-{-# LINE 173 "src/ehc/Opts/Base.chs" #-}
+{-# LINE 181 "src/ehc/Opts/Base.chs" #-}
 -- | Pgm (internal program used) options, in particular alternate internal shell commands
 data PgmExec
   = PgmExec_CPP				-- alternate CPP
@@ -100,7 +103,7 @@
   | PgmExec_Linker			-- alternate linker
   deriving (Eq,Ord,Enum,Bounded)
 
-{-# LINE 182 "src/ehc/Opts/Base.chs" #-}
+{-# LINE 190 "src/ehc/Opts/Base.chs" #-}
 -- | Wrapper around options, adding semantics for adapting cmd specific behavior
 data ExecOpt
   = ExecOpt_Plain String						-- ^ plain option
@@ -109,7 +112,7 @@
 execOptsPlain :: [ExecOpt] -> [String]
 execOptsPlain o = [ s | ExecOpt_Plain s <- o ]
 
-{-# LINE 198 "src/ehc/Opts/Base.chs" #-}
+{-# LINE 206 "src/ehc/Opts/Base.chs" #-}
 -- | The options to use.
 data EHCOpts
   = EHCOpts
@@ -163,6 +166,7 @@
       ,  ehcOptLinkingStyle   ::  LinkingStyle      -- how to link, possibly no linking (e.g. when compile only)
       ,  ehcOptGenGenerics    ::  Bool              -- generate for use of generics
       ,  ehcOptFusion   	  ::  Bool				-- allow fusion syntax, the optimization itself is triggered by optimize flags
+      ,  ehcOptAltDriver 	  ::  Bool				-- alternate (build function based) compiler driver
       ,  ehcOptHiValidityCheck::  Bool              -- when .hi and compiler are out of sync w.r.t. timestamp and checksum, recompile
       ,  ehcOptLibFileLocPath ::  FileLocPath
       ,  ehcOptPkgdirLocPath  ::  StringPath
@@ -192,8 +196,9 @@
       ,  ehcOptExecOptsMp	  ::  Map.Map FilePath [ExecOpt]
       												-- default options for commands
       }
+      deriving Typeable
 
-{-# LINE 363 "src/ehc/Opts/Base.chs" #-}
+{-# LINE 382 "src/ehc/Opts/Base.chs" #-}
 emptyEHCOpts
   = EHCOpts
       {  ehcOptTrace            =   \_ x -> x
@@ -240,6 +245,7 @@
       ,  ehcOptLinkingStyle     =   LinkingStyle_Exec      -- how to link, possibly no linking (e.g. when compile only)
       ,  ehcOptGenGenerics      =   True
       ,  ehcOptFusion			=   False
+      ,  ehcOptAltDriver 	    =   False
       ,  ehcOptHiValidityCheck  =   True
       ,  ehcOptLibFileLocPath   =   []
       ,  ehcOptPkgdirLocPath    =   []
@@ -266,14 +272,14 @@
       ,  ehcOptExecOptsMp		=   Map.empty
       }
 
-{-# LINE 534 "src/ehc/Opts/Base.chs" #-}
+{-# LINE 556 "src/ehc/Opts/Base.chs" #-}
 ehcOptTarget :: EHCOpts -> Target
 ehcOptTarget = maybeOk (\s -> panic ("ehcOptTarget: " ++ s)) id  . ehcOptMbTarget
 
 ehcOptTargetFlavor :: EHCOpts -> TargetFlavor
 ehcOptTargetFlavor = maybeOk (\s -> panic ("ehcOptTargetFlavor: " ++ s)) id . ehcOptMbTargetFlavor
 
-{-# LINE 542 "src/ehc/Opts/Base.chs" #-}
+{-# LINE 564 "src/ehc/Opts/Base.chs" #-}
 -- | Generate system F (20120421 AD: very much under construction)
 ehcOptCoreSysF :: EHCOpts -> Bool
 ehcOptCoreSysF _    = False
@@ -290,7 +296,7 @@
 ehcOptCoreSysFCheckOnlyVal :: EHCOpts -> Bool
 ehcOptCoreSysFCheckOnlyVal opts = ehcOptCoreSysFCheck opts
 
-{-# LINE 576 "src/ehc/Opts/Base.chs" #-}
+{-# LINE 598 "src/ehc/Opts/Base.chs" #-}
 -- generate bytecode
 ehcOptEmitExecBytecode :: EHCOpts -> Bool
 ehcOptEmitExecBytecode _ = False
@@ -298,12 +304,12 @@
 ehcOptEmitBytecode :: EHCOpts -> Bool
 ehcOptEmitBytecode _ = False
 
-{-# LINE 633 "src/ehc/Opts/Base.chs" #-}
+{-# LINE 655 "src/ehc/Opts/Base.chs" #-}
 -- | Check Cmm
 ehcOptCmmCheck :: EHCOpts -> Bool
 ehcOptCmmCheck _    = False
 
-{-# LINE 643 "src/ehc/Opts/Base.chs" #-}
+{-# LINE 665 "src/ehc/Opts/Base.chs" #-}
 -- | Via Core -> Grin -> CMM -> JS ?
 ehcOptIsViaGrinCmmJavaScript :: EHCOpts -> Bool
 ehcOptIsViaGrinCmmJavaScript opts
@@ -315,31 +321,31 @@
   = targetIsViaCoreJavaScript t
   where t = ehcOptTarget opts
 
-{-# LINE 664 "src/ehc/Opts/Base.chs" #-}
+{-# LINE 686 "src/ehc/Opts/Base.chs" #-}
 ehcOptIsViaCmm :: EHCOpts -> Bool
 ehcOptIsViaCmm opts = ehcOptIsViaGrinCmmJavaScript opts
 {-# INLINE ehcOptIsViaCmm #-}
 
-{-# LINE 670 "src/ehc/Opts/Base.chs" #-}
+{-# LINE 692 "src/ehc/Opts/Base.chs" #-}
 ehcOptIsViaGrin :: EHCOpts -> Bool
 ehcOptIsViaGrin opts = ehcOptIsViaGrinCmmJavaScript opts || targetIsGrinBytecode t || targetDoesHPTAnalysis t
   where t = ehcOptTarget opts
 
-{-# LINE 680 "src/ehc/Opts/Base.chs" #-}
+{-# LINE 702 "src/ehc/Opts/Base.chs" #-}
 ehcOptBuiltin :: EHCOpts -> (EHBuiltinNames -> x) -> x
 ehcOptBuiltin o f = f $ ehcOptBuiltinNames o
 
 ehcOptBuiltin2 :: EHCOpts -> (EHBuiltinNames -> Int -> HsName) -> Int -> HsName
 ehcOptBuiltin2 o f i = f (ehcOptBuiltinNames o) i
 
-{-# LINE 692 "src/ehc/Opts/Base.chs" #-}
+{-# LINE 714 "src/ehc/Opts/Base.chs" #-}
 -- | Either fromJust with a possible panic, or with a default value (when debugging)
 ehcOptFromJust :: EHCOpts -> String -> a -> Maybe a -> a
 ehcOptFromJust opts panicMsg n m
   | ehcOptDebug opts = maybe n id m
   | otherwise        = panicJust panicMsg m
 
-{-# LINE 704 "src/ehc/Opts/Base.chs" #-}
+{-# LINE 726 "src/ehc/Opts/Base.chs" #-}
 -- | Do linking into executable?
 ehcOptDoExecLinking :: EHCOpts -> Bool
 ehcOptDoExecLinking opts = ehcOptLinkingStyle opts == LinkingStyle_Exec
diff --git a/src/UHC/Light/Compiler/Opts/CommandLine.hs b/src/UHC/Light/Compiler/Opts/CommandLine.hs
--- a/src/UHC/Light/Compiler/Opts/CommandLine.hs
+++ b/src/UHC/Light/Compiler/Opts/CommandLine.hs
@@ -6,14 +6,14 @@
 , parseCmdLineOpts )
 where
 import Data.List
-import Data.Typeable
+import Data.Typeable (Typeable)
 import Data.Generics (Data)
 import UHC.Util.Binary
 import UHC.Util.Serialize
 import Control.Monad
 
 
-{-# LINE 26 "src/ehc/Opts/CommandLine.chs" #-}
+{-# LINE 29 "src/ehc/Opts/CommandLine.chs" #-}
 data CmdFlag
   = CmdFlag_Define          String      (Maybe String)
   | CmdFlag_Undefine        String
@@ -45,7 +45,7 @@
 
 type CmdLineOpts = [CmdLineOpt]
 
-{-# LINE 63 "src/ehc/Opts/CommandLine.chs" #-}
+{-# LINE 66 "src/ehc/Opts/CommandLine.chs" #-}
 cppOpt :: CmdFlag -> CmdLineOpt
 cppOpt = CmdLineOpt Cmd_CPP
 
@@ -58,7 +58,7 @@
 cppOptI :: String -> CmdLineOpt
 cppOptI = cppOpt . CmdFlag_IncludeDir
 
-{-# LINE 77 "src/ehc/Opts/CommandLine.chs" #-}
+{-# LINE 80 "src/ehc/Opts/CommandLine.chs" #-}
 gccOpt :: CmdFlag -> CmdLineOpt
 gccOpt = CmdLineOpt Cmd_C
 
@@ -74,7 +74,7 @@
 gccOptLib :: String -> CmdLineOpt
 gccOptLib = gccOpt . CmdFlag_Lib
 
-{-# LINE 98 "src/ehc/Opts/CommandLine.chs" #-}
+{-# LINE 101 "src/ehc/Opts/CommandLine.chs" #-}
 showCmdLineOpts' :: [Cmd] -> CmdLineOpts -> [String]
 showCmdLineOpts' forCmds opts = map show $ filter (\o -> cloptForCmd o `elem` forCmds) opts
 
@@ -99,7 +99,7 @@
 instance Show CmdLineOpt where
   show = show . cloptFlag
 
-{-# LINE 128 "src/ehc/Opts/CommandLine.chs" #-}
+{-# LINE 131 "src/ehc/Opts/CommandLine.chs" #-}
 -- | Parse commandline options into CmdLineOpts
 parseCmdLineOpts :: Cmd -> String -> (CmdLineOpts,[String])
 parseCmdLineOpts cmd s
diff --git a/src/UHC/Light/Compiler/SourceCodeSig.hs b/src/UHC/Light/Compiler/SourceCodeSig.hs
--- a/src/UHC/Light/Compiler/SourceCodeSig.hs
+++ b/src/UHC/Light/Compiler/SourceCodeSig.hs
@@ -1,3 +1,3 @@
 module UHC.Light.Compiler.SourceCodeSig where
-sig = "c1a69cc04e03a2a328e75c202ca08315"
-timestamp = "20150219 +0100 165739"
+sig = "fb2fa27b0965dedaaa4ed7811c221f7a"
+timestamp = "20150327 +0100 154040"
diff --git a/src/UHC/Light/Compiler/Ty.hs b/src/UHC/Light/Compiler/Ty.hs
--- a/src/UHC/Light/Compiler/Ty.hs
+++ b/src/UHC/Light/Compiler/Ty.hs
@@ -551,9 +551,9 @@
 
 
 -- #if __GLASGOW_HASKELL__ >= 708
--- deriving instance Typeable  CHRPredOcc'
+deriving instance Typeable  CHRPredOcc'
 -- #else
-deriving instance Typeable1 CHRPredOcc'
+-- deriving instance Typeable1 CHRPredOcc'
 -- #endif
 deriving instance Data CHRPredOcc
 
diff --git a/uhc-light.cabal b/uhc-light.cabal
--- a/uhc-light.cabal
+++ b/uhc-light.cabal
@@ -1,5 +1,5 @@
 Name:				uhc-light
-Version:			1.1.8.7
+Version:			1.1.8.10
 License:			BSD3
 Copyright:			Utrecht University, Department of Information and Computing Sciences, Software Technology group
 Build-Type:			 Simple 
@@ -12,24 +12,24 @@
 Synopsis:			Part of UHC packaged as cabal/hackage installable library
 Description:		A 'light' variant of UHC including only an API and executables for compiling to Core representation (uhcl) and running CoreRun (uhcr). This version is just to test the infrastructure. Later versions will provide a fleshing out of the API and completion of the now rudimentary platform independent (Haskell) interpreted running etc..
 Cabal-Version:      >= 1.8
-data-files:          103/lib/ag/AnaDomain/AbsSyn.ag,103/lib/ag/Cmm/AbsSyn.ag,103/lib/ag/Core/AbsSyn.ag,103/lib/ag/CoreRun/AbsSyn.ag,103/lib/ag/EH/AbsSyn.ag,103/lib/ag/Error/AbsSyn.ag,103/lib/ag/Foreign/AbsSyn.ag,103/lib/ag/GrinByteCode/AbsSyn.ag,103/lib/ag/GrinCode/AbsSyn.ag,103/lib/ag/HS/AbsSyn.ag,103/lib/ag/JavaScript/AbsSyn.ag,103/lib/ag/JVMClass/AbsSyn.ag,103/lib/ag/LLVM/AbsSyn.ag,103/lib/ag/Silly/AbsSyn.ag,103/lib/ag/Ty/AbsSyn.ag,103/lib/ag/TyCore/AbsSyn.ag,103/lib/pkg/array-1.0.0.0/103/cr/plain/Data/Array.cr,103/lib/pkg/array-1.0.0.0/103/cr/plain/Data/Array.crr,103/lib/pkg/array-1.0.0.0/103/cr/plain/Data/Array.hi,103/lib/pkg/array-1.0.0.0/103/cr/plain/installed-pkg-config,103/lib/pkg/base-3.0.0.0/103/cr/plain/CompileAll,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Applicative.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Applicative.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Applicative.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Arrow.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Arrow.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Arrow.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Category.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Category.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Category.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/Fix.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/Fix.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/Fix.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/Instances.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/Instances.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/Instances.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/ST/Lazy.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/ST/Lazy.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/ST/Lazy.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/ST.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/ST.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/ST.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Bool.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Bool.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Bool.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Complex.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Complex.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Complex.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Dynamic.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Dynamic.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Dynamic.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Eq.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Eq.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Eq.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Foldable.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Foldable.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Foldable.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Function.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Function.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Function.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ix.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ix.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ix.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Monoid.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Monoid.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Monoid.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ord.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ord.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ord.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ratio.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ratio.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ratio.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/String.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/String.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/String.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Traversable.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Traversable.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Traversable.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/include/consUtils.h,103/lib/pkg/base-3.0.0.0/103/cr/plain/installed-pkg-config,103/lib/pkg/base-3.0.0.0/103/cr/plain/Numeric.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Numeric.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Numeric.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Prelude.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Prelude.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Prelude.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/System/Console/GetOpt.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/System/Console/GetOpt.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/System/Console/GetOpt.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/System/Exit.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/System/Exit.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/System/Exit.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/ParserCombinators/ReadP.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/ParserCombinators/ReadP.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/ParserCombinators/ReadP.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/ParserCombinators/ReadPrec.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/ParserCombinators/ReadPrec.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/ParserCombinators/ReadPrec.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Read/Lex.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Read/Lex.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Read/Lex.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Read.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Read.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Read.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Show/Functions.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Show/Functions.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Show/Functions.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Show.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Show.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Show.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Control/Monad.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Control/Monad.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Control/Monad.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Bits.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Bits.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Bits.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Char.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Char.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Char.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Either.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Either.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Either.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/IORef.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/IORef.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/IORef.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/List.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/List.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/List.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Maybe.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Maybe.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Maybe.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Typeable.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Typeable.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Data/Typeable.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Debug/Trace.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Debug/Trace.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Debug/Trace.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Foreign/Ptr.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Foreign/Ptr.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Foreign/Ptr.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Foreign/StablePtr.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Foreign/StablePtr.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Foreign/StablePtr.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/include/CTypes.h,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/include/dirUtils.h,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/include/HsBase.h,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/include/HsBaseConfig.h,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/include/IntLikeInstance.h,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/include/MachDeps.h,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/include/TupleInstance.h,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/include/Typeable.h,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/installed-pkg-config,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO/Error.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO/Error.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO/Error.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO/Fix.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO/Fix.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO/Fix.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO/Unsafe.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO/Unsafe.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO/Unsafe.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/System/IO.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Array.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Array.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Array.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Base.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Base.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Base.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Bits.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Bits.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Bits.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Bounded.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Bounded.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Bounded.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/BoxArray.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/BoxArray.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/BoxArray.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Char.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Char.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Char.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Enum.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Enum.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Enum.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Eq.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Eq.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Eq.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Float.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Float.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Float.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/GC.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/GC.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/GC.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Generics/Tuple.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Generics/Tuple.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Generics/Tuple.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Generics.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Generics.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Generics.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Handle.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Handle.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Handle.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/IO.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/IO.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/IO.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/IOBase.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/IOBase.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/IOBase.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Ix.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Ix.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Ix.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/LazyST.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/LazyST.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/LazyST.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/MutVar.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/MutVar.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/MutVar.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/MVar.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/MVar.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/MVar.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/OldException.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/OldException.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/OldException.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Ord.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Ord.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Ord.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Prims.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Prims.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Prims.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Ptr.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Ptr.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Ptr.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Read.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Read.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Read.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Real.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Real.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Real.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Run.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Run.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Run.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Show.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Show.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Show.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/ST.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/ST.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/ST.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/StablePtr.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/StablePtr.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/StablePtr.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/StackTrace.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/StackTrace.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/StackTrace.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/STRef.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/STRef.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/STRef.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Types.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Types.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Types.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Weak.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Weak.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/Weak.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/WeakPtr.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/WeakPtr.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/UHC/WeakPtr.hi,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Unsafe/Coerce.cr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Unsafe/Coerce.crr,103/lib/pkg/uhcbase-1.1.8.7/103/cr/plain/Unsafe/Coerce.hi 
+data-files:          103/lib/ag/AnaDomain/AbsSyn.ag,103/lib/ag/Cmm/AbsSyn.ag,103/lib/ag/Core/AbsSyn.ag,103/lib/ag/CoreRun/AbsSyn.ag,103/lib/ag/EH/AbsSyn.ag,103/lib/ag/Error/AbsSyn.ag,103/lib/ag/Foreign/AbsSyn.ag,103/lib/ag/GrinByteCode/AbsSyn.ag,103/lib/ag/GrinCode/AbsSyn.ag,103/lib/ag/HS/AbsSyn.ag,103/lib/ag/JavaScript/AbsSyn.ag,103/lib/ag/JVMClass/AbsSyn.ag,103/lib/ag/LLVM/AbsSyn.ag,103/lib/ag/Silly/AbsSyn.ag,103/lib/ag/Ty/AbsSyn.ag,103/lib/ag/TyCore/AbsSyn.ag,103/lib/pkg/array-1.0.0.0/103/cr/plain/Data/Array.cr,103/lib/pkg/array-1.0.0.0/103/cr/plain/Data/Array.crr,103/lib/pkg/array-1.0.0.0/103/cr/plain/Data/Array.hi,103/lib/pkg/array-1.0.0.0/103/cr/plain/installed-pkg-config,103/lib/pkg/base-3.0.0.0/103/cr/plain/CompileAll,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Applicative.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Applicative.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Applicative.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Arrow.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Arrow.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Arrow.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Category.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Category.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Category.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/Fix.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/Fix.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/Fix.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/Instances.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/Instances.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/Instances.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/ST/Lazy.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/ST/Lazy.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/ST/Lazy.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/ST.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/ST.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Control/Monad/ST.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Bool.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Bool.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Bool.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Complex.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Complex.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Complex.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Dynamic.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Dynamic.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Dynamic.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Eq.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Eq.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Eq.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Foldable.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Foldable.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Foldable.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Function.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Function.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Function.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ix.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ix.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ix.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Monoid.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Monoid.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Monoid.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ord.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ord.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ord.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ratio.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ratio.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Ratio.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/String.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/String.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/String.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Traversable.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Traversable.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Data/Traversable.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/include/consUtils.h,103/lib/pkg/base-3.0.0.0/103/cr/plain/installed-pkg-config,103/lib/pkg/base-3.0.0.0/103/cr/plain/Numeric.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Numeric.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Numeric.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Prelude.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Prelude.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Prelude.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/System/Console/GetOpt.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/System/Console/GetOpt.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/System/Console/GetOpt.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/System/Exit.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/System/Exit.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/System/Exit.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/ParserCombinators/ReadP.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/ParserCombinators/ReadP.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/ParserCombinators/ReadP.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/ParserCombinators/ReadPrec.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/ParserCombinators/ReadPrec.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/ParserCombinators/ReadPrec.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Read/Lex.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Read/Lex.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Read/Lex.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Read.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Read.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Read.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Show/Functions.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Show/Functions.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Show/Functions.hi,103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Show.cr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Show.crr,103/lib/pkg/base-3.0.0.0/103/cr/plain/Text/Show.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Control/Monad.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Control/Monad.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Control/Monad.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Bits.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Bits.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Bits.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Char.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Char.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Char.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Either.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Either.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Either.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/IORef.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/IORef.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/IORef.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/List.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/List.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/List.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Maybe.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Maybe.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Maybe.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Typeable.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Typeable.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Data/Typeable.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Debug/Trace.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Debug/Trace.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Debug/Trace.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Foreign/Ptr.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Foreign/Ptr.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Foreign/Ptr.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Foreign/StablePtr.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Foreign/StablePtr.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Foreign/StablePtr.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/include/CTypes.h,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/include/dirUtils.h,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/include/HsBase.h,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/include/HsBaseConfig.h,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/include/IntLikeInstance.h,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/include/MachDeps.h,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/include/TupleInstance.h,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/include/Typeable.h,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/installed-pkg-config,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO/Error.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO/Error.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO/Error.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO/Fix.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO/Fix.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO/Fix.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO/Unsafe.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO/Unsafe.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO/Unsafe.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/System/IO.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Array.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Array.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Array.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Base.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Base.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Base.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Bits.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Bits.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Bits.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Bounded.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Bounded.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Bounded.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/BoxArray.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/BoxArray.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/BoxArray.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Char.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Char.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Char.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Enum.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Enum.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Enum.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Eq.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Eq.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Eq.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Float.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Float.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Float.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/GC.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/GC.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/GC.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Generics/Tuple.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Generics/Tuple.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Generics/Tuple.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Generics.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Generics.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Generics.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Handle.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Handle.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Handle.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/IO.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/IO.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/IO.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/IOBase.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/IOBase.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/IOBase.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Ix.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Ix.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Ix.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/LazyST.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/LazyST.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/LazyST.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/MutVar.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/MutVar.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/MutVar.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/MVar.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/MVar.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/MVar.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/OldException.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/OldException.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/OldException.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Ord.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Ord.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Ord.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Prims.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Prims.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Prims.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Ptr.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Ptr.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Ptr.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Read.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Read.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Read.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Real.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Real.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Real.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Run.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Run.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Run.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Show.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Show.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Show.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/ST.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/ST.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/ST.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/StablePtr.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/StablePtr.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/StablePtr.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/StackTrace.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/StackTrace.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/StackTrace.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/STRef.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/STRef.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/STRef.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Types.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Types.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Types.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Weak.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Weak.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/Weak.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/WeakPtr.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/WeakPtr.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/UHC/WeakPtr.hi,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Unsafe/Coerce.cr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Unsafe/Coerce.crr,103/lib/pkg/uhcbase-1.1.8.10/103/cr/plain/Unsafe/Coerce.hi 
 extra-source-files:  changelog.md 
 
 Library
   Hs-Source-Dirs:        src 
-  Build-Depends:		fgl,hashable>=1.1&&<1.3,uhc-util>=0.1.3.7,base>=4&&<5,vector,syb,uulib,network,binary,mtl,directory,containers,array,process,primitive,binary,syb,bytestring,uulib>=0.9.12,old-locale
-  Extensions:			RankNTypes,MultiParamTypeClasses,FunctionalDependencies,UndecidableInstances,DeriveDataTypeable,OverlappingInstances,LiberalTypeSynonyms,StandaloneDeriving,FlexibleContexts,FlexibleInstances,TypeSynonymInstances,ScopedTypeVariables
-  Exposed-Modules:		 UHC.Light.Compiler.API,UHC.Light.Compiler.Base.API,UHC.Light.Compiler.Core.API,UHC.Light.Compiler.CoreRun.API,UHC.Light.Compiler.CoreRun.API.Internal,UHC.Light.Compiler.EHC.Main,UHC.Light.Compiler.EHC.Main.Utils 
-  Other-Modules:		 Paths_uhc_light,UHC.Light.Compiler.AbstractCore,UHC.Light.Compiler.AbstractCore.Utils,UHC.Light.Compiler.AnaDomain,UHC.Light.Compiler.AnaDomain.Ftv,UHC.Light.Compiler.AnaDomain.Pretty,UHC.Light.Compiler.AnaDomain.Trf.Instantiate,UHC.Light.Compiler.AnaDomain.Trf.Subst,UHC.Light.Compiler.AnaDomain.Utils,UHC.Light.Compiler.Base.CfgPP,UHC.Light.Compiler.Base.Common,UHC.Light.Compiler.Base.Debug,UHC.Light.Compiler.Base.FileSearchLocation,UHC.Light.Compiler.Base.Fld,UHC.Light.Compiler.Base.HsName,UHC.Light.Compiler.Base.HsName.Builtin,UHC.Light.Compiler.Base.Optimize,UHC.Light.Compiler.Base.PackageDatabase,UHC.Light.Compiler.Base.ParseUtils,UHC.Light.Compiler.Base.Parser,UHC.Light.Compiler.Base.Parser2,UHC.Light.Compiler.Base.Pragma,UHC.Light.Compiler.Base.RLList,UHC.Light.Compiler.Base.Range,UHC.Light.Compiler.Base.Strictness,UHC.Light.Compiler.Base.Target,UHC.Light.Compiler.Base.TermLike,UHC.Light.Compiler.Base.TreeTrie,UHC.Light.Compiler.Base.UID,UHC.Light.Compiler.CHR,UHC.Light.Compiler.CHR.Constraint,UHC.Light.Compiler.CHR.Key,UHC.Light.Compiler.CHR.Solve,UHC.Light.Compiler.CodeGen.BasicAnnot,UHC.Light.Compiler.CodeGen.Bits,UHC.Light.Compiler.CodeGen.BuiltinPrims,UHC.Light.Compiler.CodeGen.BuiltinSizeInfo,UHC.Light.Compiler.CodeGen.CVar,UHC.Light.Compiler.CodeGen.Const,UHC.Light.Compiler.CodeGen.ImportUsedModules,UHC.Light.Compiler.CodeGen.ModuleImportExportImpl,UHC.Light.Compiler.CodeGen.RefGenerator,UHC.Light.Compiler.CodeGen.Tag,UHC.Light.Compiler.CodeGen.TrfUtils,UHC.Light.Compiler.CodeGen.ValAccess,UHC.Light.Compiler.Config,UHC.Light.Compiler.ConfigCabal,UHC.Light.Compiler.ConfigDefines,UHC.Light.Compiler.ConfigInstall,UHC.Light.Compiler.ConfigInternalVersions,UHC.Light.Compiler.Core,UHC.Light.Compiler.Core.BindExtract,UHC.Light.Compiler.Core.Check,UHC.Light.Compiler.Core.Coercion,UHC.Light.Compiler.Core.ExtractFFE,UHC.Light.Compiler.Core.FFI,UHC.Light.Compiler.Core.FvS,UHC.Light.Compiler.Core.Merge,UHC.Light.Compiler.Core.ModAsMap,UHC.Light.Compiler.Core.Parser,UHC.Light.Compiler.Core.Pretty,UHC.Light.Compiler.Core.Subst,UHC.Light.Compiler.Core.SysF.AsTy,UHC.Light.Compiler.Core.ToCoreRun,UHC.Light.Compiler.Core.ToGrin,UHC.Light.Compiler.Core.Trf,UHC.Light.Compiler.Core.Trf.ANormal,UHC.Light.Compiler.Core.Trf.AnaRelevance,UHC.Light.Compiler.Core.Trf.AnnBasedSimplify,UHC.Light.Compiler.Core.Trf.CAFGlobalAsArg,UHC.Light.Compiler.Core.Trf.ConstProp,UHC.Light.Compiler.Core.Trf.ElimNonCodegenConstructs,UHC.Light.Compiler.Core.Trf.ElimTrivApp,UHC.Light.Compiler.Core.Trf.EraseExtractTysigCore,UHC.Light.Compiler.Core.Trf.EtaRed,UHC.Light.Compiler.Core.Trf.ExplicitStackTrace,UHC.Light.Compiler.Core.Trf.FixAfterParse,UHC.Light.Compiler.Core.Trf.FloatToGlobal,UHC.Light.Compiler.Core.Trf.InlineLetAlias,UHC.Light.Compiler.Core.Trf.LamGlobalAsArg,UHC.Light.Compiler.Core.Trf.LetDefBeforeUse,UHC.Light.Compiler.Core.Trf.LetFlattenStrict,UHC.Light.Compiler.Core.Trf.LetUnrec,UHC.Light.Compiler.Core.Trf.OptimizeStrictness,UHC.Light.Compiler.Core.Trf.RenUniq,UHC.Light.Compiler.Core.UsedModNms,UHC.Light.Compiler.Core.Utils,UHC.Light.Compiler.CoreRun,UHC.Light.Compiler.CoreRun.Check,UHC.Light.Compiler.CoreRun.Parser,UHC.Light.Compiler.CoreRun.Pretty,UHC.Light.Compiler.CoreRun.Prim,UHC.Light.Compiler.CoreRun.Run,UHC.Light.Compiler.CoreRun.Run.Val,UHC.Light.Compiler.CoreRun.Run.Val.Prim,UHC.Light.Compiler.CoreRun.Run.Val.RunExplStk,UHC.Light.Compiler.CoreRun.Run.Val.RunImplStk,UHC.Light.Compiler.Deriving,UHC.Light.Compiler.EH,UHC.Light.Compiler.EH.MainAG,UHC.Light.Compiler.EH.MainAG_AGItf,UHC.Light.Compiler.EH.MainAG_CaseAlt,UHC.Light.Compiler.EH.MainAG_CaseAlts,UHC.Light.Compiler.EH.MainAG_DataConstr,UHC.Light.Compiler.EH.MainAG_DataConstrs,UHC.Light.Compiler.EH.MainAG_DataField,UHC.Light.Compiler.EH.MainAG_DataFieldExpr,UHC.Light.Compiler.EH.MainAG_DataFieldPatExpr,UHC.Light.Compiler.EH.MainAG_DataFields,UHC.Light.Compiler.EH.MainAG_Decl,UHC.Light.Compiler.EH.MainAG_Decls,UHC.Light.Compiler.EH.MainAG_Expr,UHC.Light.Compiler.EH.MainAG_ExprAnn,UHC.Light.Compiler.EH.MainAG_FuncDep,UHC.Light.Compiler.EH.MainAG_FuncDeps,UHC.Light.Compiler.EH.MainAG_KiExpr,UHC.Light.Compiler.EH.MainAG_KiExprAnn,UHC.Light.Compiler.EH.MainAG_MbTyExpr,UHC.Light.Compiler.EH.MainAG_PatExpr,UHC.Light.Compiler.EH.MainAG_PatExprAnn,UHC.Light.Compiler.EH.MainAG_PrExpr,UHC.Light.Compiler.EH.MainAG_PrExprs,UHC.Light.Compiler.EH.MainAG_RecExpr,UHC.Light.Compiler.EH.MainAG_RecPatExpr,UHC.Light.Compiler.EH.MainAG_RowTyExpr,UHC.Light.Compiler.EH.MainAG_TyExpr,UHC.Light.Compiler.EH.MainAG_TyExprAnn,UHC.Light.Compiler.EH.MainAG_TyExprs,UHC.Light.Compiler.EH.MainAG_TyVar,UHC.Light.Compiler.EH.MainAG_TyVars,UHC.Light.Compiler.EH.MainAG_common,UHC.Light.Compiler.EH.Parser,UHC.Light.Compiler.EHC.BuildFunction,UHC.Light.Compiler.EHC.BuildFunction.Run,UHC.Light.Compiler.EHC.Common,UHC.Light.Compiler.EHC.CompileGroup,UHC.Light.Compiler.EHC.CompilePhase.Cleanup,UHC.Light.Compiler.EHC.CompilePhase.Common,UHC.Light.Compiler.EHC.CompilePhase.CompileC,UHC.Light.Compiler.EHC.CompilePhase.FlowBetweenPhase,UHC.Light.Compiler.EHC.CompilePhase.Link,UHC.Light.Compiler.EHC.CompilePhase.Module,UHC.Light.Compiler.EHC.CompilePhase.Output,UHC.Light.Compiler.EHC.CompilePhase.Parsers,UHC.Light.Compiler.EHC.CompilePhase.Run,UHC.Light.Compiler.EHC.CompilePhase.Semantics,UHC.Light.Compiler.EHC.CompilePhase.TopLevelPhases,UHC.Light.Compiler.EHC.CompilePhase.Transformations,UHC.Light.Compiler.EHC.CompilePhase.Translations,UHC.Light.Compiler.EHC.CompileRun,UHC.Light.Compiler.EHC.CompileUnit,UHC.Light.Compiler.EHC.Environment,UHC.Light.Compiler.EHC.InitialSetup,UHC.Light.Compiler.Error,UHC.Light.Compiler.Error.Pretty,UHC.Light.Compiler.FinalEnv,UHC.Light.Compiler.Foreign,UHC.Light.Compiler.Foreign.Boxing,UHC.Light.Compiler.Foreign.Extract,UHC.Light.Compiler.Foreign.Parser,UHC.Light.Compiler.Foreign.Pretty,UHC.Light.Compiler.Gam,UHC.Light.Compiler.Gam.AppSpineGam,UHC.Light.Compiler.Gam.Base,UHC.Light.Compiler.Gam.ClGam,UHC.Light.Compiler.Gam.ClassDefaultGam,UHC.Light.Compiler.Gam.DataGam,UHC.Light.Compiler.Gam.FixityGam,UHC.Light.Compiler.Gam.Full,UHC.Light.Compiler.Gam.Instantiate,UHC.Light.Compiler.Gam.KiGam,UHC.Light.Compiler.Gam.PolGam,UHC.Light.Compiler.Gam.Quantify,UHC.Light.Compiler.Gam.TyGam,UHC.Light.Compiler.Gam.TyKiGam,UHC.Light.Compiler.Gam.Utils,UHC.Light.Compiler.Gam.ValGam,UHC.Light.Compiler.Generics,UHC.Light.Compiler.HI,UHC.Light.Compiler.HS,UHC.Light.Compiler.HS.MainAG,UHC.Light.Compiler.HS.ModImpExp,UHC.Light.Compiler.HS.Parser,UHC.Light.Compiler.LamInfo,UHC.Light.Compiler.Module.ImportExport,UHC.Light.Compiler.Module.Merge,UHC.Light.Compiler.NameAspect,UHC.Light.Compiler.Opts,UHC.Light.Compiler.Opts.Base,UHC.Light.Compiler.Opts.CommandLine,UHC.Light.Compiler.Pred,UHC.Light.Compiler.Pred.CHR,UHC.Light.Compiler.Pred.CommonCHR,UHC.Light.Compiler.Pred.Evidence,UHC.Light.Compiler.Pred.EvidenceToCore,UHC.Light.Compiler.Pred.Heuristics,UHC.Light.Compiler.Pred.RedGraph,UHC.Light.Compiler.Pred.ToCHR,UHC.Light.Compiler.Scanner.Common,UHC.Light.Compiler.Scanner.Machine,UHC.Light.Compiler.Scanner.Scanner,UHC.Light.Compiler.Scanner.Token,UHC.Light.Compiler.Scanner.TokenParser,UHC.Light.Compiler.SourceCodeSig,UHC.Light.Compiler.Substitutable,UHC.Light.Compiler.Ty,UHC.Light.Compiler.Ty.AppSpineGam,UHC.Light.Compiler.Ty.FIEnv,UHC.Light.Compiler.Ty.FIEnv2,UHC.Light.Compiler.Ty.FitsIn,UHC.Light.Compiler.Ty.FitsInCommon,UHC.Light.Compiler.Ty.FitsInCommon2,UHC.Light.Compiler.Ty.Ftv,UHC.Light.Compiler.Ty.Parser,UHC.Light.Compiler.Ty.Pretty,UHC.Light.Compiler.Ty.TreeTrieKey,UHC.Light.Compiler.Ty.Trf.BetaReduce,UHC.Light.Compiler.Ty.Trf.Canonic,UHC.Light.Compiler.Ty.Trf.FreshVar,UHC.Light.Compiler.Ty.Trf.Instantiate,UHC.Light.Compiler.Ty.Trf.MergePreds,UHC.Light.Compiler.Ty.Trf.Quantify,UHC.Light.Compiler.Ty.Trf.Subst,UHC.Light.Compiler.Ty.UsedNames,UHC.Light.Compiler.Ty.Utils1,UHC.Light.Compiler.Ty.Utils2,UHC.Light.Compiler.VarLookup,UHC.Light.Compiler.VarMp,UHC.Light.Compiler.VarMp.Utils 
+  Build-Depends:		fgl,hashable>=1.1&&<1.3,uhc-util>=0.1.5.1,base>=4.7&&<5,vector,syb,uulib,network,binary,mtl,transformers,directory,containers,array,process,filepath,primitive,binary,syb,bytestring,uulib>=0.9.12,old-locale
+  Extensions:			RankNTypes,MultiParamTypeClasses,FunctionalDependencies,UndecidableInstances,DeriveDataTypeable,OverlappingInstances,LiberalTypeSynonyms,StandaloneDeriving,DeriveGeneric,FlexibleContexts,FlexibleInstances,TypeSynonymInstances,ScopedTypeVariables
+  Exposed-Modules:		 UHC.Light.Compiler.API,UHC.Light.Compiler.Base.API,UHC.Light.Compiler.Core.API,UHC.Light.Compiler.CoreRun.API,UHC.Light.Compiler.CoreRun.API.Internal,UHC.Light.Compiler.EHC.Main,UHC.Light.Compiler.EHC.Main.Compile,UHC.Light.Compiler.EHC.Main.Utils 
+  Other-Modules:		 Paths_uhc_light,UHC.Light.Compiler.AbstractCore,UHC.Light.Compiler.AbstractCore.Utils,UHC.Light.Compiler.AnaDomain,UHC.Light.Compiler.AnaDomain.Ftv,UHC.Light.Compiler.AnaDomain.Pretty,UHC.Light.Compiler.AnaDomain.Trf.Instantiate,UHC.Light.Compiler.AnaDomain.Trf.Subst,UHC.Light.Compiler.AnaDomain.Utils,UHC.Light.Compiler.Base.CfgPP,UHC.Light.Compiler.Base.Common,UHC.Light.Compiler.Base.Debug,UHC.Light.Compiler.Base.FileSearchLocation,UHC.Light.Compiler.Base.Fld,UHC.Light.Compiler.Base.HsName,UHC.Light.Compiler.Base.HsName.Builtin,UHC.Light.Compiler.Base.Optimize,UHC.Light.Compiler.Base.PackageDatabase,UHC.Light.Compiler.Base.ParseUtils,UHC.Light.Compiler.Base.Parser,UHC.Light.Compiler.Base.Parser2,UHC.Light.Compiler.Base.Pragma,UHC.Light.Compiler.Base.RLList,UHC.Light.Compiler.Base.Range,UHC.Light.Compiler.Base.Strictness,UHC.Light.Compiler.Base.Target,UHC.Light.Compiler.Base.TermLike,UHC.Light.Compiler.Base.TreeTrie,UHC.Light.Compiler.Base.UID,UHC.Light.Compiler.CHR,UHC.Light.Compiler.CHR.Constraint,UHC.Light.Compiler.CHR.Key,UHC.Light.Compiler.CHR.Solve,UHC.Light.Compiler.CodeGen.BasicAnnot,UHC.Light.Compiler.CodeGen.Bits,UHC.Light.Compiler.CodeGen.BuiltinPrims,UHC.Light.Compiler.CodeGen.BuiltinSizeInfo,UHC.Light.Compiler.CodeGen.CVar,UHC.Light.Compiler.CodeGen.Const,UHC.Light.Compiler.CodeGen.ImportUsedModules,UHC.Light.Compiler.CodeGen.ModuleImportExportImpl,UHC.Light.Compiler.CodeGen.RefGenerator,UHC.Light.Compiler.CodeGen.Tag,UHC.Light.Compiler.CodeGen.TrfUtils,UHC.Light.Compiler.CodeGen.ValAccess,UHC.Light.Compiler.Config,UHC.Light.Compiler.ConfigCabal,UHC.Light.Compiler.ConfigDefines,UHC.Light.Compiler.ConfigInstall,UHC.Light.Compiler.ConfigInternalVersions,UHC.Light.Compiler.Core,UHC.Light.Compiler.Core.BindExtract,UHC.Light.Compiler.Core.Check,UHC.Light.Compiler.Core.Coercion,UHC.Light.Compiler.Core.ExtractFFE,UHC.Light.Compiler.Core.FFI,UHC.Light.Compiler.Core.FvS,UHC.Light.Compiler.Core.Merge,UHC.Light.Compiler.Core.ModAsMap,UHC.Light.Compiler.Core.Parser,UHC.Light.Compiler.Core.Pretty,UHC.Light.Compiler.Core.Subst,UHC.Light.Compiler.Core.SysF.AsTy,UHC.Light.Compiler.Core.ToCoreRun,UHC.Light.Compiler.Core.ToGrin,UHC.Light.Compiler.Core.Trf,UHC.Light.Compiler.Core.Trf.ANormal,UHC.Light.Compiler.Core.Trf.AnaRelevance,UHC.Light.Compiler.Core.Trf.AnnBasedSimplify,UHC.Light.Compiler.Core.Trf.CAFGlobalAsArg,UHC.Light.Compiler.Core.Trf.ConstProp,UHC.Light.Compiler.Core.Trf.ElimNonCodegenConstructs,UHC.Light.Compiler.Core.Trf.ElimTrivApp,UHC.Light.Compiler.Core.Trf.EraseExtractTysigCore,UHC.Light.Compiler.Core.Trf.EtaRed,UHC.Light.Compiler.Core.Trf.ExplicitStackTrace,UHC.Light.Compiler.Core.Trf.FixAfterParse,UHC.Light.Compiler.Core.Trf.FloatToGlobal,UHC.Light.Compiler.Core.Trf.InlineLetAlias,UHC.Light.Compiler.Core.Trf.LamGlobalAsArg,UHC.Light.Compiler.Core.Trf.LetDefBeforeUse,UHC.Light.Compiler.Core.Trf.LetFlattenStrict,UHC.Light.Compiler.Core.Trf.LetUnrec,UHC.Light.Compiler.Core.Trf.OptimizeStrictness,UHC.Light.Compiler.Core.Trf.RenUniq,UHC.Light.Compiler.Core.UsedModNms,UHC.Light.Compiler.Core.Utils,UHC.Light.Compiler.CoreRun,UHC.Light.Compiler.CoreRun.Check,UHC.Light.Compiler.CoreRun.Parser,UHC.Light.Compiler.CoreRun.Pretty,UHC.Light.Compiler.CoreRun.Prim,UHC.Light.Compiler.CoreRun.Run,UHC.Light.Compiler.CoreRun.Run.Val,UHC.Light.Compiler.CoreRun.Run.Val.Prim,UHC.Light.Compiler.CoreRun.Run.Val.RunExplStk,UHC.Light.Compiler.CoreRun.Run.Val.RunImplStk,UHC.Light.Compiler.Deriving,UHC.Light.Compiler.EH,UHC.Light.Compiler.EH.MainAG,UHC.Light.Compiler.EH.MainAG_AGItf,UHC.Light.Compiler.EH.MainAG_CaseAlt,UHC.Light.Compiler.EH.MainAG_CaseAlts,UHC.Light.Compiler.EH.MainAG_DataConstr,UHC.Light.Compiler.EH.MainAG_DataConstrs,UHC.Light.Compiler.EH.MainAG_DataField,UHC.Light.Compiler.EH.MainAG_DataFieldExpr,UHC.Light.Compiler.EH.MainAG_DataFieldPatExpr,UHC.Light.Compiler.EH.MainAG_DataFields,UHC.Light.Compiler.EH.MainAG_Decl,UHC.Light.Compiler.EH.MainAG_Decls,UHC.Light.Compiler.EH.MainAG_Expr,UHC.Light.Compiler.EH.MainAG_ExprAnn,UHC.Light.Compiler.EH.MainAG_FuncDep,UHC.Light.Compiler.EH.MainAG_FuncDeps,UHC.Light.Compiler.EH.MainAG_KiExpr,UHC.Light.Compiler.EH.MainAG_KiExprAnn,UHC.Light.Compiler.EH.MainAG_MbTyExpr,UHC.Light.Compiler.EH.MainAG_PatExpr,UHC.Light.Compiler.EH.MainAG_PatExprAnn,UHC.Light.Compiler.EH.MainAG_PrExpr,UHC.Light.Compiler.EH.MainAG_PrExprs,UHC.Light.Compiler.EH.MainAG_RecExpr,UHC.Light.Compiler.EH.MainAG_RecPatExpr,UHC.Light.Compiler.EH.MainAG_RowTyExpr,UHC.Light.Compiler.EH.MainAG_TyExpr,UHC.Light.Compiler.EH.MainAG_TyExprAnn,UHC.Light.Compiler.EH.MainAG_TyExprs,UHC.Light.Compiler.EH.MainAG_TyVar,UHC.Light.Compiler.EH.MainAG_TyVars,UHC.Light.Compiler.EH.MainAG_common,UHC.Light.Compiler.EH.Parser,UHC.Light.Compiler.EHC.ASTHandler,UHC.Light.Compiler.EHC.ASTHandler.Instances,UHC.Light.Compiler.EHC.BuildFunction,UHC.Light.Compiler.EHC.BuildFunction.Run,UHC.Light.Compiler.EHC.Common,UHC.Light.Compiler.EHC.CompileGroup,UHC.Light.Compiler.EHC.CompilePhase.Cleanup,UHC.Light.Compiler.EHC.CompilePhase.Common,UHC.Light.Compiler.EHC.CompilePhase.CompileC,UHC.Light.Compiler.EHC.CompilePhase.FlowBetweenPhase,UHC.Light.Compiler.EHC.CompilePhase.Link,UHC.Light.Compiler.EHC.CompilePhase.Module,UHC.Light.Compiler.EHC.CompilePhase.Output,UHC.Light.Compiler.EHC.CompilePhase.Parsers,UHC.Light.Compiler.EHC.CompilePhase.Run,UHC.Light.Compiler.EHC.CompilePhase.Semantics,UHC.Light.Compiler.EHC.CompilePhase.TopLevelPhases,UHC.Light.Compiler.EHC.CompilePhase.Transformations,UHC.Light.Compiler.EHC.CompilePhase.Translations,UHC.Light.Compiler.EHC.CompileRun,UHC.Light.Compiler.EHC.CompileUnit,UHC.Light.Compiler.EHC.Environment,UHC.Light.Compiler.EHC.FileSuffMp,UHC.Light.Compiler.EHC.InitialSetup,UHC.Light.Compiler.Error,UHC.Light.Compiler.Error.Pretty,UHC.Light.Compiler.FinalEnv,UHC.Light.Compiler.Foreign,UHC.Light.Compiler.Foreign.Boxing,UHC.Light.Compiler.Foreign.Extract,UHC.Light.Compiler.Foreign.Parser,UHC.Light.Compiler.Foreign.Pretty,UHC.Light.Compiler.Gam,UHC.Light.Compiler.Gam.AppSpineGam,UHC.Light.Compiler.Gam.Base,UHC.Light.Compiler.Gam.ClGam,UHC.Light.Compiler.Gam.ClassDefaultGam,UHC.Light.Compiler.Gam.DataGam,UHC.Light.Compiler.Gam.FixityGam,UHC.Light.Compiler.Gam.Full,UHC.Light.Compiler.Gam.Instantiate,UHC.Light.Compiler.Gam.KiGam,UHC.Light.Compiler.Gam.PolGam,UHC.Light.Compiler.Gam.Quantify,UHC.Light.Compiler.Gam.TyGam,UHC.Light.Compiler.Gam.TyKiGam,UHC.Light.Compiler.Gam.Utils,UHC.Light.Compiler.Gam.ValGam,UHC.Light.Compiler.Generics,UHC.Light.Compiler.HI,UHC.Light.Compiler.HS,UHC.Light.Compiler.HS.MainAG,UHC.Light.Compiler.HS.ModImpExp,UHC.Light.Compiler.HS.Parser,UHC.Light.Compiler.LamInfo,UHC.Light.Compiler.Module.ImportExport,UHC.Light.Compiler.Module.Merge,UHC.Light.Compiler.NameAspect,UHC.Light.Compiler.Opts,UHC.Light.Compiler.Opts.Base,UHC.Light.Compiler.Opts.CommandLine,UHC.Light.Compiler.Pred,UHC.Light.Compiler.Pred.CHR,UHC.Light.Compiler.Pred.CommonCHR,UHC.Light.Compiler.Pred.Evidence,UHC.Light.Compiler.Pred.EvidenceToCore,UHC.Light.Compiler.Pred.Heuristics,UHC.Light.Compiler.Pred.RedGraph,UHC.Light.Compiler.Pred.ToCHR,UHC.Light.Compiler.Scanner.Common,UHC.Light.Compiler.Scanner.Machine,UHC.Light.Compiler.Scanner.Scanner,UHC.Light.Compiler.Scanner.Token,UHC.Light.Compiler.Scanner.TokenParser,UHC.Light.Compiler.SourceCodeSig,UHC.Light.Compiler.Substitutable,UHC.Light.Compiler.Ty,UHC.Light.Compiler.Ty.AppSpineGam,UHC.Light.Compiler.Ty.FIEnv,UHC.Light.Compiler.Ty.FIEnv2,UHC.Light.Compiler.Ty.FitsIn,UHC.Light.Compiler.Ty.FitsInCommon,UHC.Light.Compiler.Ty.FitsInCommon2,UHC.Light.Compiler.Ty.Ftv,UHC.Light.Compiler.Ty.Parser,UHC.Light.Compiler.Ty.Pretty,UHC.Light.Compiler.Ty.TreeTrieKey,UHC.Light.Compiler.Ty.Trf.BetaReduce,UHC.Light.Compiler.Ty.Trf.Canonic,UHC.Light.Compiler.Ty.Trf.FreshVar,UHC.Light.Compiler.Ty.Trf.Instantiate,UHC.Light.Compiler.Ty.Trf.MergePreds,UHC.Light.Compiler.Ty.Trf.Quantify,UHC.Light.Compiler.Ty.Trf.Subst,UHC.Light.Compiler.Ty.UsedNames,UHC.Light.Compiler.Ty.Utils1,UHC.Light.Compiler.Ty.Utils2,UHC.Light.Compiler.VarLookup,UHC.Light.Compiler.VarMp,UHC.Light.Compiler.VarMp.Utils 
 
 Executable uhcl
   Hs-Source-Dirs:        src-main 
-  Build-Depends:		uhc-light==1.1.8.7, fgl,hashable>=1.1&&<1.3,uhc-util>=0.1.3.7,base>=4&&<5,vector,syb,uulib,network,binary,mtl,directory,containers,array,process,primitive,binary,syb,bytestring,uulib>=0.9.12,old-locale
-  Extensions:			RankNTypes,MultiParamTypeClasses,FunctionalDependencies,UndecidableInstances,DeriveDataTypeable,OverlappingInstances,LiberalTypeSynonyms,StandaloneDeriving,FlexibleContexts,FlexibleInstances,TypeSynonymInstances,ScopedTypeVariables
+  Build-Depends:		uhc-light==1.1.8.10, fgl,hashable>=1.1&&<1.3,uhc-util>=0.1.5.1,base>=4.7&&<5,vector,syb,uulib,network,binary,mtl,transformers,directory,containers,array,process,filepath,primitive,binary,syb,bytestring,uulib>=0.9.12,old-locale
+  Extensions:			RankNTypes,MultiParamTypeClasses,FunctionalDependencies,UndecidableInstances,DeriveDataTypeable,OverlappingInstances,LiberalTypeSynonyms,StandaloneDeriving,DeriveGeneric,FlexibleContexts,FlexibleInstances,TypeSynonymInstances,ScopedTypeVariables
   Main-Is:           	EHC.hs
 
 Executable uhcr
   Hs-Source-Dirs:        src-main 
-  Build-Depends:		uhc-light==1.1.8.7, fgl,hashable>=1.1&&<1.3,uhc-util>=0.1.5.0,base>=4&&<5,vector,syb,uulib,network,binary,mtl,directory,containers,array,process,filepath,primitive,binary,syb,bytestring,uulib>=0.9.12,old-locale
-  Extensions:			RankNTypes,MultiParamTypeClasses,FunctionalDependencies,UndecidableInstances,DeriveDataTypeable,OverlappingInstances,LiberalTypeSynonyms,StandaloneDeriving,FlexibleContexts,FlexibleInstances,TypeSynonymInstances,ScopedTypeVariables
+  Build-Depends:		uhc-light==1.1.8.10, fgl,hashable>=1.1&&<1.3,uhc-util>=0.1.5.1,base>=4.7&&<5,vector,syb,uulib,network,binary,mtl,transformers,directory,containers,array,process,filepath,primitive,binary,syb,bytestring,uulib>=0.9.12,old-locale
+  Extensions:			RankNTypes,MultiParamTypeClasses,FunctionalDependencies,UndecidableInstances,DeriveDataTypeable,OverlappingInstances,LiberalTypeSynonyms,StandaloneDeriving,DeriveGeneric,FlexibleContexts,FlexibleInstances,TypeSynonymInstances,ScopedTypeVariables
   Main-Is:           	EHCRun.hs
