packages feed

validated-literals-0.3.0: examples/Even.hs

{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveLift #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
module Even where

import Control.DeepSeq (NFData)
import GHC.Generics (Generic)
import ValidLiterals

newtype Even = Even Integer deriving (Show, Generic, Lift)

instance NFData Even

instance Integral a => Validate a Even where
    fromLiteralWithError i
      | even i = Right . Even $ integer
      | otherwise = Left $ show integer ++ " is not even!"
      where
        integer = fromIntegral i