Very nice!

On Tue, Nov 17, 2009 at 10:16 AM, David Pollak
<feeder.of.the.be...@gmail.com> wrote:
> Okay, there's a simple answer that satisfies everyone:
>
> case class ParamCalcInfo(paramNames: List[String],
>             params: Map[String, List[String]],
>             uploadedFiles: List[FileParamHolder],
>             body: Box[Array[Byte]])
>
>
>   lazy val ParamCalcInfo(paramNames: List[String],
>             params: Map[String, List[String]],
>             uploadedFiles: List[FileParamHolder],
>             body: Box[Array[Byte]]) = paramCalculator()
>
> No type erasure issues because the case class defines the types.  Optional
> (and in my opinion, necessary for at the very least documentation purposes)
> type declarations on the variables.  Better compiler enforcement than
> tuples.
>
> On Mon, Nov 16, 2009 at 10:30 PM, Kris Nuttycombe
> <kris.nuttyco...@gmail.com> wrote:
>>
>> On Mon, Nov 16, 2009 at 11:13 PM, David Pollak
>> <feeder.of.the.be...@gmail.com> wrote:
>> >
>> >
>> > On Mon, Nov 16, 2009 at 5:01 PM, Alex Boisvert <alex.boisv...@gmail.com>
>> > wrote:
>> >>
>> >> On Mon, Nov 16, 2009 at 4:26 PM, David Pollak
>> >> <feeder.of.the.be...@gmail.com> wrote:
>> >>>
>> >>> Speaking of warnings, which do you prefer (see patch below):
>> >>>>
>> >>>> 1) Explicit types on val extractors (as it is today)
>> >>>> 2) One-liner with no types (proposed)
>> >>>>
>> >>>> We could save 4 warnings...
>> >>>
>> >>> Here's the cost of the 4 warnings:
>> >>>
>> >>> If you remove the type information and the lazy calculator thing
>> >>> changes
>> >>> how it does calculations, you'll silently get changed types (this has
>> >>> happened before) and that breaks things.  On the other hand, if we
>> >>> leave the
>> >>> code with explicit types, we'll get a match warning (with the type
>> >>> erasure
>> >>> stuff turned back off) if the type change.
>> >>
>> >> You get breakage if the types change in an incompatible manner in both
>> >> cases.
>> >>
>> >> I don't see how you get any added safety by adding the types
>> >> explicitly.
>> >
>> > You get type-safety in downstream code... the code that is accessing the
>> > variables.  You also avoid type inferencer problems.  The type
>> > inferencer
>> > doesn't always give you what you expect (it's not like Haskell).  Being
>> > explicit about what you expect is going to insure that the compiler does
>> > the
>> > right thing, even if it issues a spurious warning.
>> >
>> > So, why am I harping on this?
>>
>> The thing is, the compiler really *doesn't* do the right thing if you
>> supply the types. In fact, it will do the wrong thing if you change
>> the upstream code more frequently than it will do the right thing.
>>
>> Case in point: this compiles without complaint:
>>
>> object Test {
>>    class A
>>    class B extends A
>>
>>    val (a: A, b: B) = (new A, new A);
>> }
>>
>> It will fail at runtime with a MatchError or ClassCastException or
>> something equally nasty. If the types were not annotated, then the
>> downstream code would fail to compile.
>>
>> Kris
>>
>> > (1) This code was stuff I worked on to get right back in 2007.  It's
>> > stable
>> > and despite the aesthetic displeasure of a spurious warning, it does not
>> > need to change.
>> > (2) This code reflects a lot of work "getting it right" with the Scala
>> > compiler back when the Scala compiler was less stable.  I know the code
>> > currently works and I don't remember what kind of weirdness other
>> > variations
>> > on the code caused, but I don't want to find out if there are latent
>> > issues
>> > with the Scala compiler.
>> > (3) From a priority standpoint, this is suboptimal.  It's suboptimal for
>> > me
>> > to have to sell you on why it should not be changed.  It is suboptimal
>> > because there are open tickets for some real issues that real users need
>> > addressed.  If your bent is more oriented to getting to know the code,
>> > there's plenty of ScalaDocs and higher level documentation to write.
>> > (4) from a readibility standpoint, I like the code the way it is and
>> > it's
>> > most likely that if there's a problem or enhancement in that part of the
>> > code, it's me or Marius that're going to be fixing it.
>> >
>> >
>> >
>> >>
>> >> In both cases, the compiler has the same information about the types
>> >> and
>> >> perform the same amount of type checking for you.
>> >
>> >
>> >
>> >>
>> >> alex
>> >>
>> >> --
>> >>
>> >> You received this message because you are subscribed to the Google
>> >> Groups
>> >> "Lift" group.
>> >> To post to this group, send email to lift...@googlegroups.com.
>> >> To unsubscribe from this group, send email to
>> >> liftweb+unsubscr...@googlegroups.com.
>> >> For more options, visit this group at
>> >> http://groups.google.com/group/liftweb?hl=.
>> >
>> >
>> >
>> > --
>> > Lift, the simply functional web framework http://liftweb.net
>> > Beginning Scala http://www.apress.com/book/view/1430219890
>> > Follow me: http://twitter.com/dpp
>> > Surf the harmonics
>> >
>> > --
>> >
>> > You received this message because you are subscribed to the Google
>> > Groups
>> > "Lift" group.
>> > To post to this group, send email to lift...@googlegroups.com.
>> > To unsubscribe from this group, send email to
>> > liftweb+unsubscr...@googlegroups.com.
>> > For more options, visit this group at
>> > http://groups.google.com/group/liftweb?hl=.
>> >
>>
>> --
>>
>> You received this message because you are subscribed to the Google Groups
>> "Lift" group.
>> To post to this group, send email to lift...@googlegroups.com.
>> To unsubscribe from this group, send email to
>> liftweb+unsubscr...@googlegroups.com.
>> For more options, visit this group at
>> http://groups.google.com/group/liftweb?hl=.
>>
>>
>
>
>
> --
> Lift, the simply functional web framework http://liftweb.net
> Beginning Scala http://www.apress.com/book/view/1430219890
> Follow me: http://twitter.com/dpp
> Surf the harmonics
>
> --
>
> You received this message because you are subscribed to the Google Groups
> "Lift" group.
> To post to this group, send email to lift...@googlegroups.com.
> To unsubscribe from this group, send email to
> liftweb+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/liftweb?hl=.
>

--

You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to lift...@googlegroups.com.
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=.


Reply via email to