Boost logo

Boost :

Subject: [boost] Boost.Hana - Maybe and Either data types design
From: Vicente J. Botet Escriba (vicente.botet_at_[hidden])
Date: 2014-09-21 03:37:22

Hi Louis,

I have some concerns with the design of the Maybe and Either data types
(maybe the other data types have the same design, I have not taken a
look at).
There are somethings that I don't understand, sorry I have not changed
yet my mind to then new C++ way.

If I want to define a function that takes an Either string int, how can
I define it?

void f(??? p) {}

I see that there is a maybe_detail::maybe<bool,class>, however I don't
think this is the data type of Maybe, is it?
Anyway, I don't see a either_detail::either<bool, class, class>.

I have the impression that I must use always auto with lambdas

auto f = [](auto p) {...};

But I don't know what I can put in the body.
It is to clear neither how can I declare a variable of type Either
string int. I see that I can declare a Left string and a Right int

BOOST_HANA_CONSTEXPR_LAMBDA auto left_value = left("x");
BOOST_HANA_CONSTEXPR_LAMBDA auto right_value = right(1);

I have the impression that the variables are initialized only once and
can not be reassigned,or at least we can not assing a Left value to a
variable initialized with a Right value. Is this by design?

A last concern related to the applicative lift function. I suspect that
it corresponds to the Haskell return function and the more general unit
Monad function.
As there is a lift function in Haskell, this is a little bit confusing.
I have named this function make :) In Haskell, the template parameter is
a type constructor. This Monad(Applicative) type constructor should be
Either E, not Either. Is the type-constructor feature missing from your

How wan I create an Either string int with a call to

   auto x =lift<Either>(123);

I would expect something like

   auto x = lift<Either<string>>(123);

In my prototype I have

   auto x = make<expected<holder, string>>(123);

where expected<holder, string> is the Monad type constructor for
expected<T, string>.
Sorry the argument of expected and Either are in interchanged. The
string type is the Error.


Boost list run by bdawes at, gregod at, cpdaniel at, john at