
I think, that Newtype instances are transitive, and there is only one sane definiton is (pack . pack). But in example below I have to use UndecidableInstances and they seems to loop somewhere (Context reduction stack overflow; size = 132).
To my understanding, Ghc tries to prove, that exists only one type b, and somewhy fail at it(It is unclear, why), but is it any way to say to it that I take responsibility, that ANY b would be nice?
you should checkout genealizednewtype deriving :) https://ghc.haskell.org/trac/haskell-prime/wiki/NewtypeDeriving
GHC has had it for quite some time
also the Coerce Machinery in 7.8 GHC provides a stronger version of your NewType style class
No, it is not what I want. With it I would have to enumerate every type
down. so for A_n
newtype A0 = A0 Int
...
newtype A_n = A_n A_{n-1}
I would need list all n instances. In more general say, I want
following:
class Foo a b where
foo :: a -> b
--- Yes, UndecidableInstances. Yes, ambitious types.
--- Take any b, yes unsafe, trust me, it will be okay.
instance (Foo a b, Foo b c) => Foo a c where
foo = foo . foo
--
Best regards, Dmitry Bogatov