
So I should re-phrase my question: Has anyone extended tangible values to Generic types and given them a modern html interface?
I think the answer is "no"; and it would be extremely great if someone did.
But I think at least part of the problem is that one is forced to marry
oneself to a particular web framework/JavaScript library, and is therefore
immediately out of date :(
Personally, back in the day I quite like the API put out by Yesod for
auto-generating forms - https://www.yesodweb.com/book/forms - but I don't
think it quite does what you want. Maybe it's a simple adaptation, though
(of course, forcing yourself to use a particular flavour of
javascript/styling approach).
On Thu, 2 Mar 2023 at 16:41, Olaf Klinke
On Thu, 2023-03-02 at 07:34 -0800, Ivan Perez wrote:
All of this reminds me of Conal Elliott's Tangible Values.
(Not for web but the idea still applies.)
Ivan
Yes, the concept has been re-invented multiple times, as is the case with most good ideas. TVs are general enough to bolt a web interface on top, I guess.
Seems that Conal, too, has not solved the sum type problem. The tangible value GADT https://hackage.haskell.org/package/TV-0.5.0/docs/Interface-TV-Input.html has a Pair constructor but not for Sum. I wonder whether there is a deeper categorical reason for this.
So I should re-phrase my question: Has anyone extended tangible values to Generic types and given them a modern html interface?
Olaf
On Thu, 2 Mar 2023 at 07:02, Olaf Klinke
wrote: On Thu, 2023-03-02 at 15:51 +0200, Georgi Lyubenov wrote:
Hey Olaf,
This is not an answer to your question, but I was reminded of
which is a language with a "browser"[1] that allows you to type in terms and get back webpages based on those terms "automagically", which sounds like exactly what you need. I don't know how it's implemented, so I don't know if it is actually relevant to you, but it is worth noting that Grace itself is implemented in Haskell.
Cheers, Georgi
[0] https://github.com/Gabriella439/grace [1] https://trygrace.dev/
On 3/2/23 12:54, Olaf Klinke wrote:
Dear Cafe,
has anyone ever attempted (and maybe succeeded) in building dynamic forms using one of the Haskell web frameworks (Yesod,Servant,...)? By "dynamic" form I mean a form that changes the number of fields
on selections the user makes in other fields of the form.
For example, say one has an algebraic data type
data T = Number Int | Check Bool T
A form for such a type would initially consist of radio buttons or a drop-down list with options "Number" and "Check" that lets the user select the constructor. When "Number" is selected, an <input type="number"> field is shown. When "Check" is selected, an <input type="checkbox"> is displayed next to another form of this kind.
In the end, one would use the GHC.Generics machinery to generate
for a wide range of algebraic data types. I've seen this in the Clean language's iTask library [1] and it's very convenient. Of course this would involve a lot of JavaScript like document.createElement() as well as book-keeping how to re-asseble
Grace[0], based forms the
fields into a T value upon submission. At least the latter is already handled by libraries such as yesod-form.
Olaf
[1] https://cloogle.org/src/#itasks/iTasks/UI/Editor/Generic [2] https://github.com/haskell-servant/servant-swagger/issues/80
Thanks for the pointer!
The Grace README says under Notable Omissions:
Recursion or recursive data types
Grace only supports two built-in recursive types, which are List and JSON, but does not support user-defined recursion or anonymous recursion.
User-defined datatypes
All data types in Grace are anonymous (e.g. anonymous records and anonymous unions), and there is no concept of a data declaration
The tutorial shows how Grace function inputs are mapped to forms, where functions with List input indeed have a form that is "dynamic" in the sense I defined. Otherwise there is only one input field per function argument. That means complex types are to be input in JSON syntax and parsed. Instead of a DSL, I'd prefer a shallow embedding into Haskell, so that one can leverage all the available machinery. Yet Grace already goes a long way towards what I am after.
Olaf
_______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.
_______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.
-- Noon van der Silk, ن http://silky.github.io/ "My programming language is kindness."