After reading through the Pollen documentation, I'm extremely sold on the power 
of semantic markup.  But I'm a bit confused about whether to preserve semantics 
in the generated X-expressions and, if so, how we would do so.

Consider the following toy example:

```
#lang pollen

◊(books (book "The Hitchhiker's Guide to the Galaxy")
        (book "Catch 22")
        (book "The Name of the Wind"))
◊(films (film "Star Wars: A New Hope")
        (book "One Flew Over The Cuckoo's Nest")
        (book "The Hitchhiker's Guide to the Galaxy"))
```

This is nicely semantic markup and, by default, produces an equally semantic 
X-expression:

```
'(root
  (books
   (book "The Hichhiker's Guide to the Galaxy")
   (book "Catch 22")
   (book "The Name of the Wind"))
  "\n"
  (films
   (film "Star Wars: A New Hope")
   (book "One Flew Over The Cuckoo's Nest")
   (book "The Hick hiker's Guide to the Galaxy"))
  "\n")
```

However, this markup does not (yet) produce valid HTML.  If we want it to 
produce valid HTML we could define functions like this in our `pollen.rkt` file 
(these are toy examples that leave a lot out for simplicity):

```
#lang racket
(require pollen/tag
         pollen/decode)
(provide (all-defined-out))

(define (books . elements) `(ul ,@elements))
(define (book title) `(li ,title))

(define (films . elements) `(ul ,@elements))
(define (film title) `(li ,title))
```

Now our nice semantic markup produces valid HTML, exactly as we wanted.

However, we've now lost the semantics in our generated X-expression.  We're now 
getting

```
'(root
  (ul
   (li "The Hitchhiker's Guide to the Galaxy")
   (li "Catch 22")
   (li "The Name of the Wind"))
  "\n"
  (ul
   (li "Star Wars: A New Hope")
   (li "One Flew Over The Cuckoo's Nest")
   (li "The Hitchhiker's Guide to the Galaxy"))
  "\n")
```

In addition to not looking as pretty, the loss of our semantic tags in the 
X-expression means we can't do things like write a decoder that distinguishes 
between `(book "The Hitchhiker's Guide to the Galaxy")` and `(film "The 
Hitchhiker's Guide to the Galaxy")`.  In general, my intuition is that the 
semantics should be preserved as long as possible and only stripped out when 
taking the final step of transforming out data to the output format (here, 
HTML).  But I'm not sure if that's possible/worth the effort.

This leads me to the question I started with: is there a better approach that 
would preserve the semantic meaning in our generated X-expression (while still 
yielding valid HTML)?  Or does it just not make sense to try to preserve 
semantics in the X-expression, given that we have semantics in the markup?  I 
played around with `(decode)` a bit and couldn't get it to work for this.  But 
I wasn't sure if that's because I don't yet fully understand `(decode)` or 
because I was trying to get it to do something it wasn't meant to do.

I'd appropriate anyone's perspective on this.

(By the way, Matthew, thanks very much for your helpful replies to my recent 
questions.  I haven't replied just to say "thanks" out of a desire not to spam 
the group, but I very much appreciate your help!)





-- 
You received this message because you are subscribed to the Google Groups 
"Pollen" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to