[web-devel] missing web component needed: server-side page control

Jeremy Shaw jeremy at n-heptane.com
Tue Jun 22 15:39:26 EDT 2010


I have been experimenting with a Widget system based on HSX+HJScript.

The biggest issue I have run into seems to be marshaling your data  
between Haskell and Javascript. The problem is that the two languages  
offer fairly different and incompatible data representations. But you  
often want to send data back and forth between the client (javascript)  
and server (Haskell).

You have 5 choices, that I can think of:

  1. Use nice algebraic types. This makes your Haskell code nice, but  
working with algebraic types in javascript is a pain. [1]

  2. Use objects (json) for your types. This makes the javascript  
easier to work with, but is a type mess in Haskell and not easy to  
work with.

  3. Use algebraic types in Haskell, and Objects in javascript. This  
makes the data easy to work with in both language, but you have to be  
able to convert from one style to another. In my opinion, that  
requires writing both representations by hand and the marshaling  
functions by hand. Then anytime you change the type, you have to  
change both types (the haskell and javascript versions) and update the  
marshal functions. There is also no guarantee that you did any of it  
right with out testing.

  4. Create a DSL for defining types which automatically generates the  
Haskell/javascript datatypes. This would presumably use a fairly  
limited set of types such that the types it generates are 'friendly'  
to use in both the Haskell and javascript-side. The drawback is that  
it is likely to be restrictive enough that it is not especially nice  
to use in either language. (Likely to be somewhat verbose I think...)

  5. Compile haskell-to-javascript (or something along those lines),  
so that you only think in Haskell and don't have to think about  
javascript or javascript types. This is nice because you only have to  
think in one language, etc. But performance of the javascript code is  
a concern. And it makes it difficult to leverage existing javascript  
libraries like jQuery (because jquery is going to want javascripty  
types, etc).

I'd like to hear about other options, or implementations of those  
options that work well..

- jeremy

I have not tried using this algrebraic data type library for  
javascript yet.. because I just remembered it existed.

[1] http://w3future.com/weblog/stories/2008/06/16/adtinjs.xml


On Jun 22, 2010, at 8:53 AM, Sergey Mironov wrote:

> Hi! This is definitely the right way. Current set of related
> technologies includes
> Formlets, HJScript, Web-routes, various template systems like Hamlet  
> or HSX.
>
>>    3 create a minimum javascript module that:
>>         read Ajax responses and execute them in the web browser, for
>> the above functionality
>>         listen for events and forward them to the server trough Ajax.
>
> Ajax is just one approach of several existing. Building a
> haskell-to-JavaScript generator looks more important for me. Please
> look at [1] and [2]. what do you think?
>
> Generally, it is already possible to manage client java-scripts on the
> server with  HSX + HJScript [3]. On the other hand, managing pure html
> forms for JScript-free apps is possible with the help of Formlets. But
> when one starts using them all together, code becomes awkward.
>
> [1] http://www.haskell.org/haskellwiki/Haskell_in_web_browser
> [2] http://vir.mskhug.ru/
> [3] http://git.ierton.ru/?p=happstack-samples.git;a=blob_plain;f=HJSample.hs;hb=master
>
> -- 
> Thanks,
> Sergey
> _______________________________________________
> web-devel mailing list
> web-devel at haskell.org
> http://www.haskell.org/mailman/listinfo/web-devel



More information about the web-devel mailing list