[Haskell-cafe] More liberal than liberal type synonyms

Dmitry Kulagin dmitry.kulagin at gmail.com
Wed Dec 7 11:48:30 CET 2011


Hi Dan,

I am still pretty new in Haskell, but this problem annoys me already.

If I define certain monad as a type synonym:

    type StateA a = StateT SomeState SomeMonad a

Then I can't declare new monad based on the synonym:

    type StateB a = StateT SomeOtherState StateA a

The only way I know to overcome is to declare StateA without `a':

    type StateA = StateT SomeState SomeMonad

But it is not always possible with existing code base.

I am sorry, if this is offtopic, but it seemed to me that the problem
is realted to partially applied type synomyms you described.

Thanks!
Dmitry

On Tue, Dec 6, 2011 at 10:59 PM, Dan Doel <dan.doel at gmail.com> wrote:
> Greetings,
>
> In the process of working on a Haskell-alike language recently, Ed
> Kmett and I realized that we had (without really thinking about it)
> implemented type synonyms that are a bit more liberal than GHC's. With
> LiberalTypeSynonyms enabled, GHC allows:
>
>    type Foo a b = b -> a
>    type Bar f = f String Int
>
>    baz :: Bar Foo
>    baz = show
>
> because Bar expands to saturate Foo. However, we had also implemented
> the following, which fails in GHC:
>
>    type Foo a b = b -> a
>    type Bar f = f (Foo Int) (Foo Int)
>    type Baz f g = f Int -> g Int
>
>    quux :: Bar Baz
>    quux = id
>
> That is: type synonyms are allowed to be partially applied within
> other type synonyms, as long as similar transitive saturation
> guarantees are met during their use.
>
> I don't know how useful it is, but I was curious if anyone can see
> anything wrong with allowing this (it seems okay to me after a little
> thought), and thought I'd float the idea out to the GHC developers, in
> case they're interested in picking it up.
>
> -- Dan
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe



More information about the Haskell-Cafe mailing list