# Safe [![Hackage version](https://img.shields.io/hackage/v/safe.svg?label=Hackage)](https://hackage.haskell.org/package/safe) [![Build Status](https://img.shields.io/travis/ndmitchell/safe.svg)](https://travis-ci.org/ndmitchell/safe) A library wrapping `Prelude`/`Data.List` functions that can throw exceptions, such as `head` and `!!`. Each unsafe function has up to four variants, e.g. with `tail`: * tail :: [a] -> [a], raises an error on `tail []`. * tailMay :: [a] -> Maybe [a], turns errors into `Nothing`. * tailDef :: [a] -> [a] -> [a], takes a default to return on errors. * tailNote :: String -> [a] -> [a], takes an extra argument which supplements the error message. * tailSafe :: [a] -> [a], returns some sensible default if possible, `[]` in the case of `tail`. This package is divided into three modules: * `Safe` contains safe variants of `Prelude` and `Data.List` functions. * `Safe.Foldable` contains safe variants of `Foldable` functions. * `Safe.Exact` creates crashing versions of functions like `zip` (errors if the lists are not equal) and `take` (errors if there are not enough elements), then wraps them to provide safe variants.