Drkcore

07 10 2012 Haskell Tweet

Yesod無しでHamletを使う

sofのコードは動かなかった

  • Text.Blaze.Renderer.Stringは廃止なのでText.Blaze.Html.Renderer.String
  • HamletじゃなくてHtmlUrl

この二点を直したら動いた

{-# LANGUAGE TemplateHaskell, QuasiQuotes #-}

import Data.Text
import Text.Blaze.Html.Renderer.String (renderHtml)
import Text.Hamlet

data Url = Haskell | Yesod

renderUrl Haskell _ = pack "http://haskell.org"
renderUrl Yesod   _ = pack "http://www.yesodweb.com"

title = pack "This is in scope of the template below"

template :: HtmlUrl Url
template = [hamlet|
<html>
    <head>
        #{title}
    <body>
        <p>
            <a href=@{Haskell}>Haskell
            <a href=@{Yesod}>Yesod
|]

main = do
    let html = template renderUrl
    putStrLn $ renderHtml html

hamletのシンタックスは先頭がタグなので、普段Jade使っている僕にとっては似てるけどなんか変だなという印象だ。しかし、Jadeは先頭の文字列の区別が予約語(ifとか)、それ以外の記号で始まらない文字列はタグになるので、込み入ったテンプレートは結構読みにくい。

なので、タグで区別できるHamletのほうが可読性がいいのかな。

インラインのタグを入れ子にしたい場合には、エスケープの処理とかしないといけないのはインデント系に共通の読みにくさかも。あと条件演算子を入れると同じレベルのliなんかでもインデントが1つ下がるので、ちょっと読みにくくなってしまうところも一緒かな。

Hamletでヨサゲなのはテンプレート中でMaybeとかCase式が使えるところかな。

なんか作ってみたくなってきた。

ProductName Developing Web Applications With Haskell and Yesod
Michael Snoyman
Oreilly & Associates Inc / 2805円 ( 2012-05-04 )


About

  • もう5年目(wishlistありマス♡)
  • 最近はPythonとDeepLearning
  • 日本酒自粛中
  • ドラムンベースからミニマルまで
  • ポケモンGOゆるめ

Tag

Python Deep Learning javascript chemoinformatics Emacs sake and more...

Ad

© kzfm 2003-2021