[web-devel] widgets vs hamlet was Re: on the necessity of extractBody
Max Cantor
mxcantor at gmail.com
Wed May 4 10:08:46 CEST 2011
oops, forgot to reply to all
----------------------------
addWidget doesn't work. when I replace addHamlet with addWidget and ^{form} with ^{formW} I get the errors below. Its not that I'm that bothered by having to write extractBody, but since you say I dont have to I feel like this means I'm doing something. Again, I feel like I can get widgets and hamlet and html to work, but I feel like I'm hacking it and dont really understand whats going on.
when you say polymorphic hamlet is going away, what will replace it? everything is a widget then?
S4M/Server/Handler/Admin.hs:49:11:
No instance for (Eq (Route master0))
arising from a use of `widgetToPageContent'
Possible fix: add an instance declaration for (Eq (Route master0))
In the expression: widgetToPageContent
In a stmt of a 'do' expression:
pc <- widgetToPageContent
$ do { addWidget ($(Settings.hamletFile "admin/purch-dtl")) }
In a stmt of a 'do' expression:
(_, formW, et, nonce) <- runFormPost (purchFormlet purch ocrRefs)
S4M/Server/Handler/Admin.hs:51:19:
The lambda expression `\ render[aCFb]
-> hamlet-0.8.0:Text.Hamlet.Debug.unsafeRenderTemplate
"hamlet/admin/purch-dtl.hamlet" ... render[aCFb]'
has one argument,
but its type `GGWidget master0 (GHandler sub0 master0) ()' has none
In the expression:
\ render[aCFb]
-> hamlet-0.8.0:Text.Hamlet.Debug.unsafeRenderTemplate
"hamlet/admin/purch-dtl.hamlet"
[(["mPsiPkv"],
Text.Hamlet.RT.HDMaybe (fmap (\ _var[aCFc] -> ...) mPsiPkv)),
(["act"], Text.Hamlet.RT.HDUrl act), ....]
render[aCFb]
In the result of the splice:
$(Settings.hamletFile "admin/purch-dtl")
To see what the splice expanded to, use -ddump-splices
In the first argument of `addWidget', namely
`$(Settings.hamletFile "admin/purch-dtl")'
S4M/Server/Handler/Admin.hs:51:19:
The lambda expression `\ render[aCKe]
-> hamlet-0.8.0:Text.Hamlet.Debug.unsafeRenderTemplate
"hamlet/admin/purch-dtl.hamlet" ... render[aCKe]'
has one argument,
but its type `GGWidget master0 (GHandler sub0 master0) ()' has none
In the expression:
\ render[aCKe]
-> hamlet-0.8.0:Text.Hamlet.Debug.unsafeRenderTemplate
"hamlet/admin/purch-dtl.hamlet"
[(["mPsiPkv"],
Text.Hamlet.RT.HDMaybe (fmap (\ _var[aCKf] -> ...) mPsiPkv)),
(["act"], Text.Hamlet.RT.HDUrl act), ....]
render[aCKe]
In the result of the splice:
$(Settings.hamletFile "admin/purch-dtl")
To see what the splice expanded to, use -ddump-splices
In the first argument of `addWidget', namely
`$(Settings.hamletFile "admin/purch-dtl")'
On May 4, 2011, at 1:15 PM, Michael Snoyman wrote:
> Firstly, polymorphic Hamlet is going the way of the do-do. (Sorry
> everyone, the train ride worked out differently than expected, so the
> blog post explaining this isn't ready yet.) So going forward these
> things should be less of a problem.
>
> I think the reason you're running into trouble is the use of
> "addHamlet"; try replacing it with "addWidget" and see what happens.
>
> On Tue, May 3, 2011 at 4:33 PM, Max Cantor <mxcantor at gmail.com> wrote:
>> I've heard that its unnecessary, but I can't seem to get out it of my code. for instance, here is a simple route which should return a small HTML snippet for AJAX requests:
>>
>> getAdmPurchDetailRh :: EncPurchId -> Handler RepHtml
>> getAdmPurchDetailRh epid = withEncPersistKey epid $ \(purchId, purch) -> do
>> -- purchImgData <- runDB $ selectList [] [] 50 offset
>> -- _TODO this will be done FOR EACH Purchase. need to cache the OcrRefs
>> ocrRefs <- map snd <$> runDB ( selectList [] [] 50 0)
>> mPsiPkv <- runDB (getBy $ PurchImgUnq purchId True)
>> (_, formW, et, nonce) <- runFormPost (purchFormlet purch ocrRefs)
>> let act = AdminRb
>> pc <- widgetToPageContent $ do
>> form <- extractBody formW
>> addHamlet $(Settings.hamletFile "admin/purch-dtl")
>> hamletToRepHtml [$hamlet|\^{pageBody pc}|]
>>
>> and the hamlet file:
>>
>> <div>
>> $maybe psiPkv <- mPsiPkv
>> <img src=@{getPurchImgRoute psiPkv}>
>> $nothing
>> <span .missingRecptImage>
>> missing image
>> <form action=@{act} enctype=#{et}>
>> #{nonce}
>> ^{form}
>> <input type=submit>
>>
>> if I drop the extractBody formW call and replace ^{form} with ^{formW} it fails to compile.
>>
>> also, is there a way to get rid of the widgetToPageContent call and then extracting it with pageBody pc? hamletToRepHtml fails when the hamlet references any widgets it seems.
>>
>> sidenote, i understand that there is alot of polymorphism going on here but I'm still not exactly clear on what i "should" be doing in terms of hamlet, widgets, snippets etc. any style hints are appreciated.
>>
>> max
>>
>>
>> _______________________________________________
>> 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