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<liftweb%2bunsubscr...@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<liftweb%2bunsubscr...@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<liftweb%2bunsubscr...@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<liftweb%2bunsubscr...@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.

Reply via email to