{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE DerivingStrategies, DeriveAnyClass #-}

module DSV.IndexError
  ( TooShort (..)
  , IndexError (..)
  ) where

import DSV.IO
import DSV.Prelude

data TooShort = TooShort
  deriving stock (TooShort -> TooShort -> Bool
(TooShort -> TooShort -> Bool)
-> (TooShort -> TooShort -> Bool) -> Eq TooShort
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TooShort -> TooShort -> Bool
$c/= :: TooShort -> TooShort -> Bool
== :: TooShort -> TooShort -> Bool
$c== :: TooShort -> TooShort -> Bool
Eq, Int -> TooShort -> ShowS
[TooShort] -> ShowS
TooShort -> String
(Int -> TooShort -> ShowS)
-> (TooShort -> String) -> ([TooShort] -> ShowS) -> Show TooShort
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [TooShort] -> ShowS
$cshowList :: [TooShort] -> ShowS
show :: TooShort -> String
$cshow :: TooShort -> String
showsPrec :: Int -> TooShort -> ShowS
$cshowsPrec :: Int -> TooShort -> ShowS
Show)
  deriving anyclass Show TooShort
Typeable TooShort
Typeable TooShort
-> Show TooShort
-> (TooShort -> SomeException)
-> (SomeException -> Maybe TooShort)
-> (TooShort -> String)
-> Exception TooShort
SomeException -> Maybe TooShort
TooShort -> String
TooShort -> SomeException
forall e.
Typeable e
-> Show e
-> (e -> SomeException)
-> (SomeException -> Maybe e)
-> (e -> String)
-> Exception e
displayException :: TooShort -> String
$cdisplayException :: TooShort -> String
fromException :: SomeException -> Maybe TooShort
$cfromException :: SomeException -> Maybe TooShort
toException :: TooShort -> SomeException
$ctoException :: TooShort -> SomeException
$cp2Exception :: Show TooShort
$cp1Exception :: Typeable TooShort
Exception

-- | The general concept of what can go wrong when you look up something by position in a list.
data IndexError error
  = IndexError_TooShort
      -- ^ There is no element at that position because the list isn't long enough.
  | IndexError_FieldError error
      -- ^ There is something wrong with the element found at the position.
  deriving stock (IndexError error -> IndexError error -> Bool
(IndexError error -> IndexError error -> Bool)
-> (IndexError error -> IndexError error -> Bool)
-> Eq (IndexError error)
forall error.
Eq error =>
IndexError error -> IndexError error -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: IndexError error -> IndexError error -> Bool
$c/= :: forall error.
Eq error =>
IndexError error -> IndexError error -> Bool
== :: IndexError error -> IndexError error -> Bool
$c== :: forall error.
Eq error =>
IndexError error -> IndexError error -> Bool
Eq, Int -> IndexError error -> ShowS
[IndexError error] -> ShowS
IndexError error -> String
(Int -> IndexError error -> ShowS)
-> (IndexError error -> String)
-> ([IndexError error] -> ShowS)
-> Show (IndexError error)
forall error. Show error => Int -> IndexError error -> ShowS
forall error. Show error => [IndexError error] -> ShowS
forall error. Show error => IndexError error -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [IndexError error] -> ShowS
$cshowList :: forall error. Show error => [IndexError error] -> ShowS
show :: IndexError error -> String
$cshow :: forall error. Show error => IndexError error -> String
showsPrec :: Int -> IndexError error -> ShowS
$cshowsPrec :: forall error. Show error => Int -> IndexError error -> ShowS
Show)
  deriving anyclass Show (IndexError error)
Typeable (IndexError error)
Typeable (IndexError error)
-> Show (IndexError error)
-> (IndexError error -> SomeException)
-> (SomeException -> Maybe (IndexError error))
-> (IndexError error -> String)
-> Exception (IndexError error)
SomeException -> Maybe (IndexError error)
IndexError error -> String
IndexError error -> SomeException
forall error.
(Typeable error, Show error) =>
Show (IndexError error)
forall error.
(Typeable error, Show error) =>
Typeable (IndexError error)
forall error.
(Typeable error, Show error) =>
SomeException -> Maybe (IndexError error)
forall error.
(Typeable error, Show error) =>
IndexError error -> String
forall error.
(Typeable error, Show error) =>
IndexError error -> SomeException
forall e.
Typeable e
-> Show e
-> (e -> SomeException)
-> (SomeException -> Maybe e)
-> (e -> String)
-> Exception e
displayException :: IndexError error -> String
$cdisplayException :: forall error.
(Typeable error, Show error) =>
IndexError error -> String
fromException :: SomeException -> Maybe (IndexError error)
$cfromException :: forall error.
(Typeable error, Show error) =>
SomeException -> Maybe (IndexError error)
toException :: IndexError error -> SomeException
$ctoException :: forall error.
(Typeable error, Show error) =>
IndexError error -> SomeException
$cp2Exception :: forall error.
(Typeable error, Show error) =>
Show (IndexError error)
$cp1Exception :: forall error.
(Typeable error, Show error) =>
Typeable (IndexError error)
Exception