On 21 February 2014 21:35, Cédric Beust ♔ <ced...@beust.com> wrote:
> > On Fri, Feb 21, 2014 at 1:08 PM, Kevin Wright <kev.lee.wri...@gmail.com>wrote: > >> 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". >> > > That's something I definitely want for tuples but probably not for lists, > although there's definitely a bit of room for interpretation, here (the > regular interpretation for a list expects the ordering to be preserved but > if you look at List from the monad perspective, a list is just an > enumeration of multiple outcomes, and the ordering is meaningless). > Not so! A list has a very definite concept of maintaining its sequence; it's Set that doesn't. Shapeless can quite happily translate between HLists and Tuples (and case classes) and will even retrofit HList behaviour onto Tuples. This means you can do a lot of stuff not typically associated with Tuples: zipping, concatenation, splitting, partitioning, mapping, flatMapping, reversing, head, tail, etc. Note that you can write code with HLists that abstracts over the length - which isn't so easy with Tuples :) > Also, the fact that Shapeless does it this way is not really a voluntary > design choice: the inferrer has simply no choice in the matter, so it's > more of a restriction of Scala's type system than anything else (another > reason why I say that not having union/intersection types baked into the > type system imposes a lot of limitations). > Absolutely it's a limitation, hence the need for Coproducts and Dotty. I wouldn't say that HLists are a workaround for the lack of built-in intersection though, they're a very different tools that can sometimes be used in the same way. > > -- > 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.