{-# LANGUAGE Unsafe #-}

-- | Unsafe functions to work with lists and 'Maybe'.
-- Sometimes unavoidable but better don't use them. This module
-- is not even included in default prelude exports.

module Unsafe
       ( unsafeHead
       , unsafeTail
       , unsafeInit
       , unsafeLast
       , unsafeFromJust
       , unsafeIndex
       ) where

import           Base       (Int)
import qualified Data.List  as List
import qualified Data.Maybe as Maybe

-- | Cautionary alias for 'List.head'.
unsafeHead :: [a] -> a
unsafeHead = List.head

-- | Cautionary alias for 'List.tail'.
unsafeTail :: [a] -> [a]
unsafeTail = List.tail

-- | Cautionary alias for 'List.init'.
unsafeInit :: [a] -> [a]
unsafeInit = List.init

-- | Cautionary alias for 'List.last'.
unsafeLast :: [a] -> a
unsafeLast = List.last

-- | Cautionary alias for 'List.!!'.
unsafeIndex :: [a] -> Int -> a
unsafeIndex = (List.!!)

-- | Cautionary alias for 'Maybe.fromJust'.
unsafeFromJust :: Maybe.Maybe a -> a
unsafeFromJust = Maybe.fromJust