haskus-utils-1.5: Haskus utility modules

Safe HaskellSafe
LanguageHaskell2010

Haskus.Utils.Embed

Description

Embed data into the executable binary

Synopsis

Documentation

embedBytes :: [Word8] -> Q Exp Source #

Embed bytes in a C array, return an Addr#

Raw text quasiquoter

raw :: QuasiQuoter Source #

A quasiquoter for raw string literals - that is, string literals that don't recognise the standard escape sequences (such as '\n'). Basically, they make your code more readable by freeing you from the responsibility to escape backslashes. They are useful when working with regular expressions, DOS/Windows paths and markup languages (such as XML).

Don't forget the LANGUAGE QuasiQuotes pragma if you're using this module in your code.

Usage:

:set -XQuasiQuotes
import Haskus.Utils.Embed
let s = [raw|\\w+\@[a-zA-Z_]+?\\.[a-zA-Z]{2,3}|]
s

"\\w+@[a-zA-Z_]+?\\.[a-zA-Z]{2,3}" > [raw|C:\Windows\SYSTEM|] ++ [raw|\user32.dll|] "C:\\Windows\\SYSTEM\\user32.dll"

Multiline raw string literals are also supported:

    multiline :: String
    multiline = [raw|<HTML>
    <HEAD>
    <TITLE>Auto-generated html formated source</TITLE>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1252">
    </HEAD>
    <BODY LINK="800080" BGCOLOR="#ffffff">
    <P> </P>
    <PRE>|]

Caveat: since the "|]" character sequence is used to terminate the quasiquotation, you can't use it inside the raw string literal. Use rawQ if you want to embed that character sequence inside the raw string.

rawQ :: QuasiQuoter Source #

A variant of raw that interprets the "|~]" sequence as "|]", "|~~]" as "|~]" and, in general, "|~^n]" as "|~^(n-1)]" for n >= 1.

Usage:

[rawQ||~]|~]|]

"|]|]"

[rawQ||~~]|]

"|~]"

[rawQ||~~~~]|]

"|~~~]"