On Tue, Jan 6, 2009 at 5:27 PM, Josh Suereth <[email protected]>wrote:
> Do any conversions exist to treat a Box[_] as an
> Either[Option[_],Exception] or as an Option[_]? Are there any helper
> functions that lift could benefit from by having these?
>
Box instances have a toOption method. Full -> Some, Empty/Failure -> None
The Box object has:
apply[T](in: Option[T]): Box[T] = in match {case Some(t) => Full(t) case _
=> Empty}
There's an implicit conversion from Box to Option.
>
>
> Also, anytime I see the line "I leave this as an excercise to the reader" I
> feel like I'm being lectured :)
>
> On Jan 6, 2009, at 7:38 PM, "Jorge Ortiz" <[email protected]> wrote:
>
> For most people, "is" does not always and exclusively mean
> "bi-implication". You are free to think this way, if you choose, but please
> don't impose your Language Police on us.
>
> --j
>
> On Tue, Jan 6, 2009 at 5:49 PM, Tony Morris < <[email protected]>
> [email protected]> wrote:
>
>>
>> When talking about data types "is" means "is congruent to" or "is
>> isomorphic to". You are not free to use "is" arbitrarily, since if you
>> are then Can "is" anything I want it to be.
>> Since equivalence can be broken into an implication both ways e.g. A
>> -> B and B -> A then it is quite easy to test if "Can is an Option".
>>
>> def f[A](o: Option[A]): Can[A] // this should be total and bijective
>> def g[A](c: Can[A]): Option[A] // this should be total and bijective
>>
>> The use of => in function signatures means logical implication. Does
>> Can imply Option? Yes (you can complete the g function). Does Option
>> imply Can? No (you cannot complete the f function). Therefore, Can is
>> not an Option. It was not even close (lack of totality in this test is
>> catastrophic).
>>
>> If you want to try to save this notion of "Well Can is a something",
>> then I have already pointed out a suggestion. Try to think of others,
>> but do not say that Can is an Option - it is not, not even close. Poor
>> Oliver was all confuzzled when he popped this one to me the other day.
>>
>> --
>> Tony Morris
>> <http://tmorris.net/>http://tmorris.net/
>>
>> S, K and I ought to be enough for anybody.
>>
>>
>> Jorge Ortiz wrote:
>> > It depends on what the meaning of "is" is.
>> >
>> > If Option were not sealed, "Can" could be "implemented" as an
>> > Option... by adding Failure and Empty as subclasses of None. In
>> > this (OO) sense, a Can is an option.
>> >
>> > In the algebraic sense, then you're probably right that a Can is
>> > not an Option.
>> >
>> > --j
>> >
>> > On Tue, Jan 6, 2009 at 5:23 PM, Tony Morris < <[email protected]>
>> [email protected]
>> > <mailto: <[email protected]>[email protected]>> wrote:
>> >
>> >
>> > No this is a mistake. Can is not an Option. Indeed it is (almost)
>> > impossible to write Can using Option (if you are familiar with
>> > Peano Arithmetic you will understand the need to qualify with
>> > almost). There is an arrow from forall A. Can[A] to Option[A] but
>> > not from forall A. Option[A] to Can[A] (easily) - try it for
>> > yourself. To suggest that Can is an Option (or "an Option with more
>> > features" or "an Either") is a mistake of misintegration (Peikoff
>> > DIM Hypothesis). Indeed the Can algebra has nothing to do with
>> > Option (except for the aforementioned function). There is no
>> > isomorphism between Can and Option - they are not the same, not
>> > even close.
>> >
>> > Here is a bit of code for fun. Note the bijective function using
>> > Either alone:
>> >
>> > sealed trait T[+A] { val e: Either[(String, T[Throwable],
>> > List[(String, Throwable)], Either[A, Unit]]
>> >
>> > // bijection to e val c: Can[A] = e match { case Left(m, e, c) =>
>> > Failure(m, e, // Can makes the mistake of using a data constructor
>> > as a type. // Unfortunately Scala permits this. c map toFailure)
>> > case Right(e) => e match { case Left(a) => Full(a) case Right(_) =>
>> > Empty } } }
>> >
>> > object T { // construct with Either or Can }
>> >
>> > -- Tony Morris <http://tmorris.net/>http://tmorris.net/
>> >
>> > S, K and I ought to be enough for anybody.
>> >
>> >
>> > David Pollak wrote:
>> >> It's an Option.
>> >>
>> >> It contains a value or it doesn't. In the case that it does not
>> >> contain a value, it may contain out of band information. This is
>> >> not any different from None which contains information. It
>> >> contains the information that it lacks information.
>> >>
>> >> Sure, you can write Option[T] as Either[T, Nothing], but the
>> >> value of only having on type is lost.
>> >>
>> >> On Tue, Jan 6, 2009 at 2:59 PM, Tony Morris
>> > < <[email protected]>[email protected] <mailto:<[email protected]>
>> [email protected]>
>> >> <mailto: <[email protected]>[email protected]
>> >> <mailto:<[email protected]>
>> [email protected]>>>
>> > wrote:
>> >>
>> >>
>> >> Right, that's what Oliver said and I was reinforcing it with
>> >> deductive reasoning. It is also not Option. It is something else
>> >> altogether. Nevertheless, an isomorphism can easily be written
>> > with
>> >> Either alone (ignoring bottoms). So in some loose sense "it is an
>> >> Either".
>> >>
>> >> -- Tony Morris <http://tmorris.net/>http://tmorris.net/
>> >>
>> >> S, K and I ought to be enough for anybody.
>> >>
>> >>
>> >> David Pollak wrote:
>> >>> Tony,
>> >>>
>> >>> Can (now Box) is not an Either.
>> >>>
>> >>> David
>> >>>
>> >>> On Tue, Jan 6, 2009 at 2:37 PM, Tony Morris
>> >> < <[email protected]>[email protected]
>> >> <mailto:<[email protected]>
>> [email protected]>
>> > <mailto: <[email protected]>[email protected]
>> > <mailto:<[email protected]>
>> [email protected]>>
>> >>> <mailto: <[email protected]>[email protected]
>> >>> <mailto:<[email protected]>
>> [email protected]>
>> > <mailto: <[email protected]>[email protected]
>> > <mailto:<[email protected]>
>> [email protected]>>>>
>> >> wrote:
>> >>>
>> >>>
>> >>> Can is not an Option and to call it so in any way is an error
>> >>> of misintegration. Indeed it would be an error to "replace
>> >>> Option
>> >> with
>> >>> Can" - they are completely different algebras. Either is kinded
>> >>> * -> * -> * so cannot possible be isomorphic and cannot
>> >>> possibly
>> >> have
>> >>> map, flatMap etc (though it can have a bifunctor map being
>> >>> covariant in both type arguments). However,
>> >>> Either.LeftProjection and Either.RightProjection are kinded *
>> >>> -> * and are both
>> >> covariant
>> >>> functors and monads, hence map, flatMap etc. are available.
>> >>> e.g. for(x <- either.left) ... is valid, try it.
>> >>>
>> >>> Of mild interest, it is possible to construct an isomorphism
>> >> to Can
>> >>> using both Either and Option. Indeed, it is possible to
>> >>> construct an isomorphism to Option using Either e.g. forall A.
>> >>> Option[A] ≡ Either [Unit, A] so it is possible using Either
>> >>> alone. I'll leave both as reader exercises.
>> >>>
>> >>>
>> >>> On Dec 21 2008, 5:15 am, Oliver Lambert <[email protected]
>> > <mailto:[email protected]>
>> >> <mailto:[email protected] <mailto:[email protected]>>
>> >>> <mailto:[email protected] <mailto:[email protected]>
>> > <mailto:[email protected] <mailto:[email protected]>>>> wrote:
>> >>>> Ok so Can is not either an Either or an Option, its a Can. I
>> >>> kind of
>> >>>> wondered when I first used Can, and it was described as an
>> >>> enhanced
>> >>>> Option, why it wasn't called something like Option+ with
>> >>> None, Some
>> >>>> and Failure.
>> >>>>
>> >>>> On 21/12/2008, at 5:47 AM, David Pollak wrote:
>> >>>>
>> >>>>> Can has map, flatMap, filter etc. So it can be used in a
>> >>>>> for comphrension. I don't believe Either has those methods.
>> >>>>>
>> >>> Further,
>> >>>>> Can has a bunch of helpers to turn Empty into Failure
>> >>>>
>> >>>>> On Dec 20, 2008 10:33 AM, "Oliver Lambert"
>> > <[email protected] <mailto:[email protected]>
>> >> <mailto:[email protected] <mailto:[email protected]>>
>> >>> <mailto:[email protected] <mailto:[email protected]>
>> > <mailto:[email protected] <mailto:[email protected]>>>> wrote:
>> >>>>
>> >>>>> Is Can a little less like Option and more like
>> >>>>> scala.Either,
>> >>> where
>> >>>>> the left side is used to indicate failure? On 21/12/2008,
>> >>>>> at 1:43 AM, David Pollak wrote: > Folks, > >
>> >>> Over the
>> >>>>> year that Lift has had Can[T...
>> >>>
>> >>>
>> >>>
>> >>>
>> >>>
>> >>> -- Lift, the simply functional web framework <http://liftweb.net>
>> http://liftweb.net
>> >>> Collaborative Task Management <http://much4.us>http://much4.usFollow me:
>> >>> <http://twitter.com/dpp>http://twitter.com/dpp Git some:
>> <http://github.com/dpp>http://github.com/dpp
>> >>>
>> >>>>
>> >>
>> >>
>> >>
>> >>
>> >>
>> >>
>> >>
>> >>
>> >> -- Lift, the simply functional web framework <http://liftweb.net>
>> http://liftweb.net
>> >> Collaborative Task Management <http://much4.us>http://much4.us Follow
>> me:
>> >> <http://twitter.com/dpp>http://twitter.com/dpp Git some:
>> <http://github.com/dpp>http://github.com/dpp
>> >>
>> >>>
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> > >
>>
>>
>>
>>
>>
>>
>>
>
> >
>
--
Lift, the simply functional web framework http://liftweb.net
Collaborative Task Management http://much4.us
Follow me: http://twitter.com/dpp
Git some: http://github.com/dpp
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Lift" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/liftweb?hl=en
-~----------~----~----~----~------~----~------~--~---