Development.Placeholders
Contents
Description
This module defines placeholders that you can use while coding to
allow incomplete code to compile. They work just like undefined,
but with improved error messages and compile-time warnings.
- notImplemented :: Q Exp
- todo :: String -> Q Exp
- placeholder :: String -> Q Exp
- placeholderNoWarning :: String -> Q Exp
- data PlaceholderException = PlaceholderException String
Example
{-# LANGUAGE TemplateHaskell #-}
import Development.Placeholders
theUltimateAnswer :: Int
theUltimateAnswer = $notImplemented
main = do
putStrLn "The ultimate answer:"
print theUltimateAnswer
This will compile with a warning about the unimplemented function:
$ ghc --make Simple.hs ... Simple.hs:6:21: Unimplemented feature ...
At runtime, an exception will be thrown when the placeholder is evaluated, indicating the location of the placeholder.
$ ./Simple The ultimate answer: Simple: PlaceholderExcption "Unimplemented feature at Simple.hs:6:21"
If compiled with the GHC flag -Werror, the warning will get turned into
an error and compilation will fail. -Werror can therefore be used to
verify that you haven't left any unintended placeholders behind.
Placeholders
Indicates that this piece of code has not yet been implemented.
$notImplemented = $(placeholder "Unimplemented feature")
Indicates unimplemented code or a known bug with a custom message.
$(todo msg) = $(placeholder ("TODO: " ++ msg))placeholder :: String -> Q ExpSource
Generates an expression of any type that, if evaluated at runtime will
throw a PlaceholderException. It is therefore similar to error, except
that the source location is automatically included. Also, a warning is
generated at compile time so you won't forget to replace placeholders
before packaging your code.
placeholderNoWarning :: String -> Q ExpSource
Similar to placeholder, but does not generate a compiler warning. Use
with care!
Exceptions
data PlaceholderException Source
Thrown when attempting to evaluate a placeholder at runtime.
Constructors
| PlaceholderException String |