milessabin/shapeless — pull request #166 by stacycurl (2014-07-12 13:25:48+00:00)
Title: Added head & tail to Coproduct

head & tail could be called headOption & tailOption; stating that it returns an Option seems redundant, but perhaps clearer.

Some coproducts could have more precise results, personally I like that it always returns Option[_], but:
(A :+: CNil).tail == None, could be undefined
(A :+: CNil).head == Some[A] could be A, or (to match tail) be undefined.