
Technically it is not different but it allows one to write things in a much
more compact way. And I would like the :| types to be of arbitrary size,
meaning each `in x y` invocation would inject a value at the right position
in the sum type without having to declare all the possible sizes of
coproducts. But maybe I could simply do that for some arbitrarily large
number of types....
--
Arnaud Bailly
FoldLabs Associate: http://foldlabs.com
On Mon, Sep 15, 2014 at 3:38 PM, Richard Eisenberg
On Sep 15, 2014, at 9:14 AM, Arnaud Bailly
wrote: Hello, I have a somewhat similar problem, trying to achieve union types but for the purpose of defining the set of allowable outcomes of a function. I have tried naively to define a type operator a :| b and I would like to be able to define a function like :
f :: Int -> Int :| String :| Bool f 1 = in 1 1 f 2 = in 2 "foo" f 3 = in 3 True
How is this different from `Either Int (Either String Bool)`?
Richard