Оценка функции во время компиляции с помощью Template Haskell

Я пишу простой класс HashString, который представляет собой всего лишь строку и ее хэш:

data HashString = HashString Int    -- ^ hash
                             T.Text -- ^ string!

Теперь я пытаюсь сгенерировать их во время компиляции, используя что-то вроде:

$(hString "hello, world") :: HashString

Я хочу, чтобы хэш и упаковка текста происходили во время компиляции. Как мне это сделать?

Вот то, что я пробовал до сих пор, но я не уверен, что это правильно, и не уверен, что он делает все во время компиляции:

hString :: String -> Q Exp
hString s = [| HashString (hash $ T.pack s) (T.pack s) |]
9
задан Clark Gaebel 11 February 2012 в 20:29
поделиться