This is an alternative site for discovering Elm packages. You may be looking for the official Elm package site instead.

Debug

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

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:

type Entity = Ship | Fish | Captain | Seagull

drawEntity entity =
  case entity of
    Ship ->
      ...

    Fish ->
      ...

    _ ->
      Debug.crash "TODO"

The Elm compiler recognizes each Debug.crash and when you run into it at runtime, the error will point to the corresponding module name and line number. For case expressions that ends with a wildcard pattern and a crash, it will also show the value that snuck through. In our example, that'd be Captain or Seagull.

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 Result libraries instead.

module Debug exposing
  ( log
  , crash
  )

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

# Debugging
@docs log, crash
-}

import Native.Debug


{-| 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.
-}
log : String -> a -> a
log =
  Native.Debug.log


{-| 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:

    type Entity = Ship | Fish | Captain | Seagull

    drawEntity entity =
      case entity of
        Ship ->
          ...

        Fish ->
          ...

        _ ->
          Debug.crash "TODO"

The Elm compiler recognizes each `Debug.crash` and when you run into it at
runtime, the error will point to the corresponding module name and line number.
For `case` expressions that ends with a wildcard pattern and a crash, it will
also show the value that snuck through. In our example, that'd be `Captain` or
`Seagull`.

**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`](Maybe) or [`Result`](Result) libraries instead.
-}
crash : String -> a
crash =
  Native.Debug.crash