{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE OverloadedLists #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE TypeApplications #-} module Main where import Prelude hiding ( Enum, fromEnum, toEnum, succ, pred, enumFrom, enumFromThen, enumFromTo, enumFromThenTo ) import qualified Prelude as P import Data.Generic.Enum import Data.Generic.Enum ( Element ) import Data.Proxy (Proxy(Proxy)) import Data.Ratio (Rational, (%)) import Data.Array (Array) import Data.Word (Word8) import qualified Data.ByteString as B import Test.Hspec (hspec, it, shouldBe) n1_int :: Int n1_int = 2 n2_int :: Int n2_int = 5 n1_rational :: Rational n1_rational = 7 % 3 n2_rational :: Rational n2_rational = 6 % 1 _a :: Word8 _a = P.toEnum (P.fromEnum 'a') _e :: Word8 _e = P.toEnum (P.fromEnum 'e') main = hspec $ do it "enumFromTo integer test" $ enumFromTo n1_int n2_int `shouldBe` P.enumFromTo n1_int n2_int it "enumFromTo rational test" $ sum ((enumFromTo n1_rational n2_rational) :: [Rational]) `shouldBe` (46 % 3) it "enumFromTo bytestring test" $ enumFromTo _a _e `shouldBe` B.pack [_a.._e]