
I am still not sure how far modifications to the type inferencer/checker affect the code produced, beyond whether any code at all is output.
Most extensions are safe, there are a few that are known to cause (or to
have caused) trouble.
Safe (type-system) extensions include: MultiParamTypeClasses,
FunctionalDependencies, FlexibleContexts, FlexibleInstances,
LiberalTypeSynonyms, DataKinds, ConstraintKinds, GADTs,
ExistentialQuantification, RankNTypes, GeneralizedNewtypeDeriving(since ghc
7.8), TypeFamilies. I would also put UndecidableInstances here, as it will
not produce incorrect code, it's just that the compiler may give up on type
checking. There are a couple of more, this is just to give you an idea..
Safe but never to be used extensions(except if you know -exactly- what
you're doing): OverlappingInstances, IncoherentInstances
Unsafe extensions: GeneralizedNewtypeDeriving(before ghc 7.8), with which
one was able to implement coerce :: a -> b
Regarding inference: if a type is not inferable that doesn't mean the term
in question is incorrect. For example if you switch on RankNTypes very
simple terms can inhabit several types. For example take f = (\x -> x). You
may think f must have type :: a -> a, but a completely different type, ::
(forall a. a) -> b also works (although it's not very useful).
On 16 September 2014 04:37, Jay Sulzberger
On Sat, 13 Sep 2014, Tslil Clingman
wrote: Right, so to be fair a more accurate description would have been: `It
can be shown that GHC with numerous extensions gives rise to a type system which is Turing Complete', my mistake. I certainly didn't mean to mislead anyone.
All too often I conflate Haskell (2010 or so) and the capabilities of GHC -- this is a trap which ensnares many, I suspect.
-- Yours &c., Tslil
Dear Tslil, my exclamation was with tongue part way in cheek, so no worry as far as I am concerned. I do not know much about Haskell, and less about GHC, but I am slowly learning. I am still not sure how far modifications to the type inferencer/checker affect the code produced, beyond whether any code at all is output. My guess today is that that most of the time, no matter what extensions are invoked, if the source type-checks, then we get the same Core output.
I am still smiling at your S, K, I, and Andras's Eval.
oo--JS.
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe