elm-lang/core/2.0.1

NOTE: this package moved to elm/core

NOTE: this package is not compatible with Elm 0.19.1

Debug

This library is for investigating bugs or performance problems. It should not be used in production code.

Console Debugging

log : String -> a -> a

Log a tagged value on the developer console, and then return the value.

1 + log "number" 1        -- equals 2, logs "number: 1"
length (log "start" [])   -- equals 0, logs "start: []"

Notice that log is not a pure function! It should only be used for investigating bugs or performance problems.

crash : String -> a

Crash the program with an error message. This is an uncatchable error, intended for code that is soon-to-be-implemented. For example, if you are working with a large ADT and have partially completed a case expression, it may make sense to do this:

data Entity = Ship | Fish | Captain | Seagull


drawEntity entity =
    case entity of
      Ship -> ...
      Fish -> ...
      _ -> Debug.crash ("drawEntity not implemented for " ++ toString entity ++ " yet!")

Note that incomplete pattern matches are very bad practice! They are one of the very few ways to crash an Elm program, and they are completely avoidable. Production code should not have incomplete pattern matches!

Use this if you want to do some testing while you are partway through writing a function.

Do not use this if you want to do some typical try-catch exception handling. Use the Maybe or Either libraries instead.

Time-Travel Debugging

watch : String -> a -> a

Watch a particular value in the debugger. Say we want to know the value of a variable called velocity because it may not be updated correctly. Adding Debug.watch allows us to name the value and show it with the debugger.

  Debug.watch "velocity" velocity == velocity

Notice that the result of evaluating this expression is exactly the same as not having the expression at all. That means it's easy to add to any value.

watchSummary : String -> (a -> b) -> a -> a

Watch a summary of a particular value in the debugger. This function is pretty much the same as watch but it lets you specify a way to summarize the value you are interested in. For example, maybe you only want to see part of a record:

  Debug.watchSummary "velocity" .velocity object

This is the same as just writing object, but it creates a watch that only looks at the value of object.velocity. You can also show summary statistics like length of a list:

  Debug.watchSummary "Number of clicks" length clicks

Again, this evaluates to clicks but we get to see how long that list is in the debugger.

trace : String -> Form -> Form

Trace all past positions of a Form in the debugger. Add this to a Form and you will see a line tracing its entire history.