Sure, HLists handle this with aplomb:

val xs = 1 :: 'a' :: 3.0f :: "hello world" :: HNil



And this isn't just a "List of Int | Char | Float | String", it's a "List
of Int *then* Char *then* Float *then* String".
Start taking heads and tails, it keeps tracking the type correctly:

xs.head // Int = 1
xs.tail.tail.head // Float = 3.0


You also get the usual map, flatMap, etc (all type-preserving)

To the best of my knowledge, shapeless doesn't currently have a method to
convert that to a List[Int :+: Char :+: Float :+: String :+: CNil] (which
is how shapeless represents unions)
But it's certainly something that *could* be implemented by anyone
sufficiently familiar with shapeless.

If you call xs.toList, it gets you back to a List[Any]





On 21 February 2014 19:52, Ricky Clarkson <ricky.clark...@gmail.com> wrote:

> Regarding List(1, "a"), I guess shapeless can likely handle that and turn
> it into either a HList whose first item is always an Int and whose second
> is always a String, or some list of Either[Int, String]. I haven't used
> shapeless but that sounds like it would be in that library's domain.
>
> The Ceylon approach is interesting as a default; I'd prefer a
> List<Integer|String> to a List[Any] any day.
>
>
> On Fri, Feb 21, 2014 at 10:52 AM, Cédric Beust ♔ <ced...@beust.com> wrote:
>
>> On Fri, Feb 21, 2014 at 10:14 AM, Kevin Wright <kev.lee.wri...@gmail.com>
>> wrote:
>>
>> It can directly duplicate anything available in Kotlin or Ceylon using
>>> nothing more than built-in features
>>>
>>  Not really, because the type system doesn’t know about union and
>> intersection types.
>>
>> scala> List(1, "a")
>> res0: List[Any] = List(1, a)
>>
>> In Ceylon, the type of this list would be List<Integer|String>.
>>
>> Null support flows very naturally out of this also, without requiring
>> hacks to make it work. For example, Null|Person can’t be assigned to a
>> Person without proper checking, and it’s also aliased to Person? for
>> convenience.
>>  --
>> Cédric
>>
>>

-- 
You received this message because you are subscribed to the Google Groups "Java 
Posse" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to javaposse+unsubscr...@googlegroups.com.
To post to this group, send email to javaposse@googlegroups.com.
Visit this group at http://groups.google.com/group/javaposse.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to