簡単な方法は使用することtoResponseBS
です:
import Data.ByteString.Char8 as C
import Data.ByteString.Lazy.Char8 as L
svgToResponse svg = toResponseBS (C.pack "image/svg+xml") (L.pack $ "<svg>" ++ svg ++ "</svg>")
別のオプションは、ToMessage
インスタンスを作成することです。
newtype SVG = SVG String
instance ToMessage SVG where
toContentType _ = C.pack "image/svg+xml"
toMessage (SVG svg) = L.pack $ "<svg>" ++ svg ++ "</svg>"
これで実行できますがtoResponse (SVG svg)
、ok $ SVG svg
後者はSVG以外のハンドラーではうまく構成できませんmsum
...
編集:上記はハンドラーからSVGファイルを提供することに関連していますが、実際には私が最初に見逃したHTMLにSVGを埋め込むように要求しました。
答えは、HTMLをどのように生成しているかによって異なります。
使用している場合は、次の関数blaze-html
を使用します。preEscapedToHtml
preEscapedToHtml $ "<svg>" ++ svg ++ "</svg>"
HSPを使用している場合は、cdata
orpcdata
関数を使用します(どちらを思い出せないので、両方を試してください)。
<svg><% cdata svg %></svg>
お役に立てば幸いです。