{- | Module : Data.MaybeLike Copyright : (c) Eduard Sergeev 2013 License : BSD-style (see the file LICENSE) Maintainer : eduard.sergeev@gmail.com Stability : experimental Portability : non-portable (multi-param classes, functional dependencies) Defines MaybeLike typeclass - a generic way to look at some types as if they were Maybe It is currently used to add maybe-ness to `unboxed` primitive types in cases when it isn't possuble to just use `Maybe a` (e.g. unboxed arrays) -} {-# LANGUAGE NoImplicitPrelude, MultiParamTypeClasses, FlexibleInstances, FunctionalDependencies #-} module Data.MaybeLike ( MaybeLike(..) ) where import Data.Bool -- | An abstract interface to a type which may not have a value class MaybeLike a v | a -> v where nothing :: a isNothing :: a -> Bool just :: v -> a fromJust :: a -> v