I personally think hybrid approaches make sense for certain designs even if 
they are a little odd.

My thought originally was having a new member of the ADT which is not final 
which represents "extensions", e.g.

JValue
  \_ JExtension
       \_ JDate

where JExtensions could be ignored or passed through unchanged by most of the 
stuff, and only special readers/writers would know what to do with them.

-Ross

On Mar 8, 2010, at 12:45 PM, David Pollak wrote:

> 
> 
> On Mon, Mar 8, 2010 at 12:50 AM, Joni Freeman <freeman.j...@gmail.com> wrote:
> This is a tricky one. The problem with extending the AST is that the
> AST is implemented as an algebraic data type. And by definition it is
> not possible to extend such a type.
> 
> Just throwing an idea out and it's likely a bad one.
> 
> I ran into a similar issue with Box and chose to do a hybrid (aka 
> Frankenstein) ADT/OO paradigm.
> 
> Perhaps it's possible to provide subclasses of certain ADT items (e.g., JDate 
> extends JInt) such that if you pattern match on a JInt, you get the millis as 
> long, but if you pattern match against JDate, you get a date extracted if 
> it's the JDate subclass.
> 
> Once again, it's likely to be a bad idea as it caused a lot of angst in Box 
> and I'm not sure if the paradigm is one that's worth perpetuating.
>  
> 
> One way to add BSON support is to create a new AST for it which
> includes all extended literals. Then add a few core functions for that
> ADT (map, etc.) and maybe a function which can encode BSON as JSON
> (bvalue.toJson). Encoding BSON as JSON would give some features for
> free, for instance toXml. Anyway, this approach would probably cause
> some code duplication between lift-json and lift-bson.
> 
> Converting the JSON AST to an object oriented design would be another
> approach. Then adding new AST nodes would not be a problem. But that
> would be a huge change to the lib. Probably too big at this phase.
> 
> Since BSON is a superset of JSON we could refactor current lift-json
> to be lift-bson and then implement lift-json on top of it. On a
> cursory look this feels cleanest but there might be some performance
> penalties for normal JSON processing due to conversions.
> 
> To be honest, I'm not yet sure what would be the best approach.
> 
> Cheers Joni
> 
> On Mar 5, 10:08 pm, Ross Mellgren <dri...@gmail.com> wrote:
> > The JSON stuff is mostly just an AST and encoding/decoding from the JSON 
> > wire format is almost just an addon. Then, it would be a matter of adding 
> > AST objects for those new things. Could be a use for phantom types ;-)
> >
> > I'd be interested to hear Joni's view on how it might fit, since he's the 
> > most familiar.
> >
> > -Ross
> >
> > On Mar 5, 2010, at 1:26 PM, Tim Nelson wrote:
> >
> > > I definitely agree with keeping the BSON code separate or possibly
> > > having a strict JSON mode.
> >
> > > Tim
> >
> > > On Fri, Mar 5, 2010 at 12:13 PM, Timothy Perrett
> > > <timo...@getintheloop.eu> wrote:
> > >> Probably a sub-ordinate module would be preferable... one  that builds 
> > >> on the lift-json stuff and doesn't pollute the "normal" JSON usage.
> >
> > >> Joni, what are your thoughts?
> >
> > >> Cheers, Tim
> >
> > >> On 5 Mar 2010, at 17:59, Tim Nelson wrote:
> >
> > >>> I finally had the opportunity to look into the couchdb code and I must
> > >>> say it is rather impressive.
> >
> > >>> I would like to utilize the code in JSONRecord.scala in scamongo [1].
> > >>> However, MongoDB uses a variation of JSON they call BSON, which they
> > >>> actually just published a spec [2] for, due to interest outside of
> > >>> MongoDB. Basically, it adds support for date, ObjectId [3], binary
> > >>> data, regular expressions, and code (JavaScript) data types.
> >
> > >>> My question is, what would it take to add support to lift-json for
> > >>> these other data types? Is this even feasible?
> >
> > >>> Thanks,
> > >>> Tim
> >
> > >>> [1]http://github.com/eltimn/scamongo
> > >>> [2]http://bsonspec.org/
> > >>> [3]http://www.mongodb.org/display/DOCS/Object+IDs
> >
> > >>> --
> > >>> 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 
> > >>> athttp://groups.google.com/group/liftweb?hl=en.
> >
> > >> --
> > >> 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 
> > >> athttp://groups.google.com/group/liftweb?hl=en.
> >
> > > --
> > > 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 
> > > athttp://groups.google.com/group/liftweb?hl=en.
> >
> >
> 
> --
> 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=en.
> 
> 
> 
> 
> -- 
> 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=en.

-- 
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=en.

Reply via email to