But you actually might want different instances for `Maybe` and for `Either`. For example, let's say that you have a typeclasse for serializing data-structures into a database. In case of Maybe you want to serialize `Nothing` into 'NULL' or something similar; in case of Either you want to have an entirely different structure. Additionally, as it have been mentioned, `Either String a` is not the same thing as `Maybe a`. Say, you have a value of type `Either String a`. How do you know that all `Left`-values are suppose to be empty string? What do you actually want is `Either () a`. On Thu, Jan 9, 2014 at 8:36 PM, Vlatko Basic <vlatko.basic@gmail.com> wrote:
Hi Artyom,
Yes, indeed.
But instance declarations wouldn't be needed because we already have all the instances for Either. The point would be to have them unified. But it is a problem that there are no data constructor synonyms in Haskell. So at least pattern matching wouldn't be possible the simple way. Maybe ViewPatterns could (partially) solve that.
vlatko
-------- Original Message -------- Subject: Re: [Haskell-cafe] Why Maybe exists if there is Either? From: Artyom Kazak <yom@artyom.me> To: haskell-cafe@haskell.org Date: 09.01.2014 16:23
Besides, even defining
type Maybe a = Either () a
in standard library wouldn’t be the same as
data Maybe a = Nothing | Just a
since in Haskell 98 type synonyms aren’t allowed in instance declarations, which means that programmers would still have to remember that `Maybe` is actually `Either ()` under-the-hood every time when writing an instance. _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
-- Sincerely yours, -- Daniil