(original) (raw)
{-# LANGUAGE BangPatterns #-} {-# LANGUAGE CPP #-} {-# LANGUAGE MagicHash #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE Trustworthy #-} {-# OPTIONS_HADDOCK not-home #-}
#include "MachDeps.h"
module GHC.Enum( Bounded(..), Enum(..), boundedEnumFrom, boundedEnumFromThen, toEnumError, fromEnumError, succError, predError,
) where
import GHC.Base hiding ( many ) import GHC.Char import GHC.Num.Integer import GHC.Num import GHC.Show import GHC.Tuple (Solo (..)) default ()
class Bounded a where minBound, maxBound :: a
[succ](GHC.Enum.html#succ) :: [a](#local-6989586621679577172) -> [a](#local-6989586621679577172)
[pred](GHC.Enum.html#pred) :: [a](#local-6989586621679577172) -> [a](#local-6989586621679577172)
[toEnum](GHC.Enum.html#toEnum) :: [Int](../https://hackage.haskell.org/package/ghc-prim-0.9.0/docs/src/GHC.Types.html#Int/GHC.Types.html#Int) -> [a](#local-6989586621679577172)
:: [a](#local-6989586621679577172) -> [Int](../https://hackage.haskell.org/package/ghc-prim-0.9.0/docs/src/GHC.Types.html#Int/GHC.Types.html#Int)
[enumFrom](GHC.Enum.html#enumFrom) :: [a](#local-6989586621679577172) -> [[a](#local-6989586621679577172)]
[enumFromThen](GHC.Enum.html#enumFromThen) :: [a](#local-6989586621679577172) -> [a](#local-6989586621679577172) -> [[a](#local-6989586621679577172)]
[enumFromTo](GHC.Enum.html#enumFromTo) :: [a](#local-6989586621679577172) -> [a](#local-6989586621679577172) -> [[a](#local-6989586621679577172)]
[enumFromThenTo](GHC.Enum.html#enumFromThenTo) :: [a](#local-6989586621679577172) -> [a](#local-6989586621679577172) -> [a](#local-6989586621679577172) -> [[a](#local-6989586621679577172)]
[succ](GHC.Enum.html#succ) = Int -> aforall a. Enum a => Int -> a toEnum (Int -> a) -> (a -> Int) -> a -> a forall b c a. (b -> c) -> (a -> b) -> a -> c . (Int -> Int -> Int forall a. Num a => a -> a -> a + Int
(Int -> Int) -> (a -> Int) -> a -> Int forall b c a. (b -> c) -> (a -> b) -> a -> c . a -> Int forall a. Enum a => a -> Int fromEnum
pred = Int -> a
forall a. Enum a => Int -> a toEnum (Int -> a) -> (a -> Int) -> a -> a forall b c a. (b -> c) -> (a -> b) -> a -> c . (Int -> Int -> Int forall a. Num a => a -> a -> a subtract Int
(Int -> Int) -> (a -> Int) -> a -> Int forall b c a. (b -> c) -> (a -> b) -> a -> c . a -> Int forall a. Enum a => a -> Int fromEnum
x = (Int -> a) -> [Int] -> [a] forall a b. (a -> b) -> [a] -> [b] map Int -> a forall a. Enum a => Int -> a toEnum [a -> Int forall a. Enum a => a -> Int fromEnum a x ..]
{-# INLINABLE [enumFromThen](GHC.Enum.html#enumFromThen) #-}
[enumFromThen](GHC.Enum.html#enumFromThen) ax a y = (Int -> a) -> [Int] -> [a] forall a b. (a -> b) -> [a] -> [b] map Int -> a forall a. Enum a => Int -> a toEnum [a -> Int forall a. Enum a => a -> Int fromEnum a x, a -> Int forall a. Enum a => a -> Int fromEnum a y ..]
{-# INLINABLE [enumFromTo](GHC.Enum.html#enumFromTo) #-}
[enumFromTo](GHC.Enum.html#enumFromTo) ax a y = (Int -> a) -> [Int] -> [a] forall a b. (a -> b) -> [a] -> [b] map Int -> a forall a. Enum a => Int -> a toEnum [a -> Int forall a. Enum a => a -> Int fromEnum a x .. a -> Int forall a. Enum a => a -> Int fromEnum a y]
{-# INLINABLE [enumFromThenTo](GHC.Enum.html#enumFromThenTo) #-}
[enumFromThenTo](GHC.Enum.html#enumFromThenTo) ax1 a x2 a y = (Int -> a) -> [Int] -> [a] forall a b. (a -> b) -> [a] -> [b] map Int -> a forall a. Enum a => Int -> a toEnum [a -> Int forall a. Enum a => a -> Int fromEnum a x1, a -> Int forall a. Enum a => a -> Int fromEnum a x2 .. a -> Int forall a. Enum a => a -> Int fromEnum a y]
{-# INLINABLE boundedEnumFrom #-}
boundedEnumFrom :: (Enum a, Bounded a) => a -> [a]
boundedEnumFrom :: forall a. (Enum a, Bounded a) => a -> [a]
boundedEnumFrom a
n = (Int -> a) -> [Int] -> [a]
forall a b. (a -> b) -> [a] -> [b]
map Int -> a
forall a. Enum a => Int -> a
toEnum [a -> Int
forall a. Enum a => a -> Int
fromEnum a
n .. a -> Int
forall a. Enum a => a -> Int
fromEnum (a
forall a. Bounded a => a
maxBound a -> a -> a
forall a. a -> a -> a
asTypeOf a
n)]
{-# INLINABLE boundedEnumFromThen #-}
boundedEnumFromThen :: (Enum a, Bounded a) => a -> a -> [a]
boundedEnumFromThen :: forall a. (Enum a, Bounded a) => a -> a -> [a]
boundedEnumFromThen a
n1 a
n2
| Int
i_n2 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= Int
i_n1 = (Int -> a) -> [Int] -> [a]
forall a b. (a -> b) -> [a] -> [b]
map Int -> a
forall a. Enum a => Int -> a
toEnum [Int
i_n1, Int
i_n2 .. a -> Int
forall a. Enum a => a -> Int
fromEnum (a
forall a. Bounded a => a
maxBound a -> a -> a
forall a. a -> a -> a
asTypeOf a
n1)]
| Bool
otherwise = (Int -> a) -> [Int] -> [a]
forall a b. (a -> b) -> [a] -> [b]
map Int -> a
forall a. Enum a => Int -> a
toEnum [Int
i_n1, Int
i_n2 .. a -> Int
forall a. Enum a => a -> Int
fromEnum (a
forall a. Bounded a => a
minBound a -> a -> a
forall a. a -> a -> a
asTypeOf a
n1)]
where
i_n1 :: Int
i_n1 = a -> Int
forall a. Enum a => a -> Int
fromEnum a
n1
i_n2 :: Int
i_n2 = a -> Int
forall a. Enum a => a -> Int
fromEnum a
n2
{-# NOINLINE toEnumError #-} toEnumError :: (Show a) => String -> Int -> (a,a) -> b toEnumError :: forall a b. Show a => String -> Int -> (a, a) -> b toEnumError String inst_ty Int i (a, a) bnds = String -> b forall a. String -> a errorWithoutStackTrace (String -> b) -> String -> b forall a b. (a -> b) -> a -> b $ String "Enum.toEnum{" String -> String -> String forall a. [a] -> [a] -> [a] ++ String inst_ty String -> String -> String forall a. [a] -> [a] -> [a] ++ String "}: tag (" String -> String -> String forall a. [a] -> [a] -> [a] ++ Int -> String forall a. Show a => a -> String show Int i String -> String -> String forall a. [a] -> [a] -> [a] ++ String ") is outside of bounds " String -> String -> String forall a. [a] -> [a] -> [a] ++ (a, a) -> String forall a. Show a => a -> String show (a, a) bnds
{-# NOINLINE fromEnumError #-} fromEnumError :: (Show a) => String -> a -> b String inst_ty a x = String -> b forall a. String -> a errorWithoutStackTrace (String -> b) -> String -> b forall a b. (a -> b) -> a -> b $ String "Enum.fromEnum{" String -> String -> String forall a. [a] -> [a] -> [a] ++ String inst_ty String -> String -> String forall a. [a] -> [a] -> [a] ++ String "}: value (" String -> String -> String forall a. [a] -> [a] -> [a] ++ a -> String forall a. Show a => a -> String show a x String -> String -> String forall a. [a] -> [a] -> [a] ++ String ") is outside of Int's bounds " String -> String -> String forall a. [a] -> [a] -> [a] ++ (Int, Int) -> String forall a. Show a => a -> String show (Int forall a. Bounded a => a minBound::Int, Int forall a. Bounded a => a maxBound::Int)
{-# NOINLINE succError #-} succError :: String -> a succError :: forall a. String -> a succError String inst_ty = String -> a forall a. String -> a errorWithoutStackTrace (String -> a) -> String -> a forall a b. (a -> b) -> a -> b $ String "Enum.succ{" String -> String -> String forall a. [a] -> [a] -> [a] ++ String inst_ty String -> String -> String forall a. [a] -> [a] -> [a] ++ String "}: tried to take `succ' of maxBound"
{-# NOINLINE predError #-} predError :: String -> a predError :: forall a. String -> a predError String inst_ty = String -> a forall a. String -> a errorWithoutStackTrace (String -> a) -> String -> a forall a b. (a -> b) -> a -> b $ String "Enum.pred{" String -> String -> String forall a. [a] -> [a] -> [a] ++ String inst_ty String -> String -> String forall a. [a] -> [a] -> [a] ++ String "}: tried to take `pred' of minBound"
deriving instance Bounded ()
instance Enum () where succ :: () -> () succ () _ = String -> () forall a. String -> a errorWithoutStackTrace String "Prelude.Enum.().succ: bad argument" pred :: () -> () pred () _ = String -> () forall a. String -> a errorWithoutStackTrace String "Prelude.Enum.().pred: bad argument"
toEnum :: Int -> ()toEnum Int x | Int x Int -> Int -> Bool forall a. Eq a => a -> a -> Bool == Int 0 = () | Bool otherwise = String -> () forall a. String -> a errorWithoutStackTrace String "Prelude.Enum.().toEnum: bad argument"
fromEnum :: () -> IntfromEnum () = Int 0 enumFrom :: () -> [()] enumFrom () = [()] enumFromThen :: () -> () -> [()] enumFromThen () () = let many :: [()] many = ()() -> [()] -> [()] forall a. a -> [a] -> [a] :[()] many in [()] many enumFromTo :: () -> () -> [()] enumFromTo () () = [()] enumFromThenTo :: () -> () -> () -> [()] enumFromThenTo () () () = let many :: [()] many = ()() -> [()] -> [()] forall a. a -> [a] -> [a] :[()] many in [()] many
instance Enum a => Enum (Solo a) where succ :: Solo a -> Solo a succ (Solo a a) = a -> Solo a forall a. a -> Solo a Solo (a -> a forall a. Enum a => a -> a succ a a) pred :: Solo a -> Solo a pred (Solo a a) = a -> Solo a forall a. a -> Solo a Solo (a -> a forall a. Enum a => a -> a pred a a)
toEnum :: Int -> Solo atoEnum Int x = a -> Solo a forall a. a -> Solo a Solo (Int -> a forall a. Enum a => Int -> a toEnum Int x)
fromEnum :: Solo a -> IntfromEnum (Solo a x) = a -> Int forall a. Enum a => a -> Int fromEnum a x enumFrom :: Solo a -> [Solo a] enumFrom (Solo a x) = [a -> Solo a forall a. a -> Solo a Solo a a | a a <- a -> [a] forall a. Enum a => a -> [a] enumFrom a x] enumFromThen :: Solo a -> Solo a -> [Solo a] enumFromThen (Solo a x) (Solo a y) = [a -> Solo a forall a. a -> Solo a Solo a a | a a <- a -> a -> [a] forall a. Enum a => a -> a -> [a] enumFromThen a x a y] enumFromTo :: Solo a -> Solo a -> [Solo a] enumFromTo (Solo a x) (Solo a y) = [a -> Solo a forall a. a -> Solo a Solo a a | a a <- a -> a -> [a] forall a. Enum a => a -> a -> [a] enumFromTo a x a y] enumFromThenTo :: Solo a -> Solo a -> Solo a -> [Solo a] enumFromThenTo (Solo a x) (Solo a y) (Solo a z) = [a -> Solo a forall a. a -> Solo a Solo a a | a a <- a -> a -> a -> [a] forall a. Enum a => a -> a -> a -> [a] enumFromThenTo a x a y a z]
deriving instance Bounded a => Bounded (Solo a)
deriving instance (Bounded a, Bounded b) => Bounded (a,b)
deriving instance (Bounded a, Bounded b, Bounded c) => Bounded (a,b,c)
deriving instance (Bounded a, Bounded b, Bounded c, Bounded d) => Bounded (a,b,c,d)
deriving instance (Bounded a, Bounded b, Bounded c, Bounded d, Bounded e) => Bounded (a,b,c,d,e)
deriving instance (Bounded a, Bounded b, Bounded c, Bounded d, Bounded e, Bounded f) => Bounded (a,b,c,d,e,f)
deriving instance (Bounded a, Bounded b, Bounded c, Bounded d, Bounded e, Bounded f, Bounded g) => Bounded (a,b,c,d,e,f,g)
deriving instance (Bounded a, Bounded b, Bounded c, Bounded d, Bounded e, Bounded f, Bounded g, Bounded h) => Bounded (a,b,c,d,e,f,g,h)
deriving instance (Bounded a, Bounded b, Bounded c, Bounded d, Bounded e, Bounded f, Bounded g, Bounded h, Bounded i) => Bounded (a,b,c,d,e,f,g,h,i)
deriving instance (Bounded a, Bounded b, Bounded c, Bounded d, Bounded e, Bounded f, Bounded g, Bounded h, Bounded i, Bounded j) => Bounded (a,b,c,d,e,f,g,h,i,j)
deriving instance (Bounded a, Bounded b, Bounded c, Bounded d, Bounded e, Bounded f, Bounded g, Bounded h, Bounded i, Bounded j, Bounded k) => Bounded (a,b,c,d,e,f,g,h,i,j,k)
deriving instance (Bounded a, Bounded b, Bounded c, Bounded d, Bounded e, Bounded f, Bounded g, Bounded h, Bounded i, Bounded j, Bounded k, Bounded l) => Bounded (a,b,c,d,e,f,g,h,i,j,k,l)
deriving instance (Bounded a, Bounded b, Bounded c, Bounded d, Bounded e, Bounded f, Bounded g, Bounded h, Bounded i, Bounded j, Bounded k, Bounded l, Bounded m) => Bounded (a,b,c,d,e,f,g,h,i,j,k,l,m)
deriving instance (Bounded a, Bounded b, Bounded c, Bounded d, Bounded e, Bounded f, Bounded g, Bounded h, Bounded i, Bounded j, Bounded k, Bounded l, Bounded m, Bounded n) => Bounded (a,b,c,d,e,f,g,h,i,j,k,l,m,n)
deriving instance (Bounded a, Bounded b, Bounded c, Bounded d, Bounded e, Bounded f, Bounded g, Bounded h, Bounded i, Bounded j, Bounded k, Bounded l, Bounded m, Bounded n, Bounded o) => Bounded (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o)
deriving instance Bounded Bool
instance Enum Bool where succ :: Bool -> Bool succ Bool False = Bool True succ Bool True = String -> Bool forall a. String -> a errorWithoutStackTrace String "Prelude.Enum.Bool.succ: bad argument"
pred :: Bool -> Bool pred Bool True = Bool False pred Bool False = String -> Bool forall a. String -> a errorWithoutStackTrace String "Prelude.Enum.Bool.pred: bad argument"
toEnum :: Int -> Bool toEnum Int n | Int n Int -> Int -> Bool forall a. Eq a => a -> a -> Bool == Int 0 = Bool False | Int n Int -> Int -> Bool forall a. Eq a => a -> a -> Bool == Int 1 = Bool True | Bool otherwise = String -> Bool forall a. String -> a errorWithoutStackTrace String "Prelude.Enum.Bool.toEnum: bad argument"
fromEnum :: Bool -> Int fromEnum Bool False = Int 0 fromEnum Bool True = Int 1
enumFrom :: Bool -> [Bool] enumFrom = Bool -> [Bool] forall a. (Enum a, Bounded a) => a -> [a] boundedEnumFrom enumFromThen :: Bool -> Bool -> [Bool] enumFromThen = Bool -> Bool -> [Bool] forall a. (Enum a, Bounded a) => a -> a -> [a] boundedEnumFromThen
deriving instance Bounded Ordering
instance Enum Ordering where succ :: Ordering -> Ordering succ Ordering LT = Ordering EQ succ Ordering EQ = Ordering GT succ Ordering GT = String -> Ordering forall a. String -> a errorWithoutStackTrace String "Prelude.Enum.Ordering.succ: bad argument"
pred :: Ordering -> Ordering pred Ordering GT = Ordering EQ pred Ordering EQ = Ordering LT pred Ordering LT = String -> Ordering forall a. String -> a errorWithoutStackTrace String "Prelude.Enum.Ordering.pred: bad argument"
toEnum :: Int -> Ordering toEnum Int n | Int n Int -> Int -> Bool forall a. Eq a => a -> a -> Bool == Int 0 = Ordering LT | Int n Int -> Int -> Bool forall a. Eq a => a -> a -> Bool == Int 1 = Ordering EQ | Int n Int -> Int -> Bool forall a. Eq a => a -> a -> Bool == Int 2 = Ordering GT toEnum Int _ = String -> Ordering forall a. String -> a errorWithoutStackTrace String "Prelude.Enum.Ordering.toEnum: bad argument"
fromEnum :: Ordering -> Int fromEnum Ordering LT = Int 0 fromEnum Ordering EQ = Int 1 fromEnum Ordering GT = Int 2
enumFrom :: Ordering -> [Ordering] enumFrom = Ordering -> [Ordering] forall a. (Enum a, Bounded a) => a -> [a] boundedEnumFrom enumFromThen :: Ordering -> Ordering -> [Ordering] enumFromThen = Ordering -> Ordering -> [Ordering] forall a. (Enum a, Bounded a) => a -> a -> [a] boundedEnumFromThen
instance Bounded Char where minBound :: Char minBound = Char '\0' maxBound :: Char maxBound = Char '\x10FFFF'
instance Enum Char where succ :: Char -> Char succ (C# Char# c#) | Int# -> Bool isTrue# (Char# -> Int# ord# Char# c# Int# -> Int# -> Int# /=# Int# 0x10FFFF#) = Char# -> Char C# (Int# -> Char# chr# (Char# -> Int# ord# Char# c# Int# -> Int# -> Int# +# Int# 1#)) | Bool otherwise = String -> Char forall a. String -> a errorWithoutStackTrace (String "Prelude.Enum.Char.succ: bad argument") pred :: Char -> Char pred (C# Char# c#) | Int# -> Bool isTrue# (Char# -> Int# ord# Char# c# Int# -> Int# -> Int# /=# Int# 0#) = Char# -> Char C# (Int# -> Char# chr# (Char# -> Int# ord# Char# c# Int# -> Int# -> Int# -# Int# 1#)) | Bool otherwise = String -> Char forall a. String -> a errorWithoutStackTrace (String "Prelude.Enum.Char.pred: bad argument")
toEnum :: Int -> ChartoEnum = Int -> Char chr fromEnum :: Char -> Int fromEnum = Char -> Int ord
{-# INLINE [enumFrom](GHC.Enum.html#enumFrom) #-}
enumFrom :: Char -> StringenumFrom (C# Char# x) = Int# -> Int# -> String eftChar (Char# -> Int# ord# Char# x) Int# 0x10FFFF#
{-# INLINE [enumFromTo](GHC.Enum.html#enumFromTo) #-}
enumFromTo :: Char -> Char -> StringenumFromTo (C# Char# x) (C# Char# y) = Int# -> Int# -> String eftChar (Char# -> Int# ord# Char# x) (Char# -> Int# ord# Char# y)
{-# INLINE [enumFromThen](GHC.Enum.html#enumFromThen) #-}
enumFromThen :: Char -> Char -> StringenumFromThen (C# Char# x1) (C# Char# x2) = Int# -> Int# -> String efdChar (Char# -> Int# ord# Char# x1) (Char# -> Int# ord# Char# x2)
{-# INLINE [enumFromThenTo](GHC.Enum.html#enumFromThenTo) #-}
enumFromThenTo :: Char -> Char -> Char -> StringenumFromThenTo (C# Char# x1) (C# Char# x2) (C# Char# y) = Int# -> Int# -> Int# -> String efdtChar (Char# -> Int# ord# Char# x1) (Char# -> Int# ord# Char# x2) (Char# -> Int# ord# Char# y)
{-# RULES
"eftChar" [1] forall x y. eftChar x y = build ([c](#local-6989586621679578218) n -> eftCharFB c n x y)
"efdChar" [1] forall x1 x2. efdChar x1 x2 = build (\ c n -> efdCharFB c n x1 x2)
"efdtChar" [~1] forall x1 x2 l. efdtChar x1 x2 l = build (\ c n -> efdtCharFB c n x1 x2 l)
"eftCharList" [1] eftCharFB (:) [] = eftChar
"efdCharList" [1] efdCharFB (:) [] = efdChar
"efdtCharList" [1] efdtCharFB (:) [] = efdtChar
#-}
{-# INLINE [0] eftCharFB #-}
eftCharFB :: (Char -> a -> a) -> a -> Int# -> Int# -> a
eftCharFB :: forall a. (Char -> a -> a) -> a -> Int# -> Int# -> a
eftCharFB Char -> a -> a
c a
n Int#
x0 Int#
y = Int# -> a
go Int#
x0
where
go :: Int# -> a
go Int#
x | Int# -> Bool
isTrue# (Int#
x Int# -> Int# -> Int#
># Int#
y) = a
n
| Bool
otherwise = Char# -> Char
C# (Int# -> Char#
chr# Int#
x) Char -> a -> a
c Int# -> a
go (Int#
x Int# -> Int# -> Int#
+# Int#
1#)
{-# NOINLINE [1] eftChar #-} eftChar :: Int# -> Int# -> String eftChar :: Int# -> Int# -> String eftChar Int# x Int# y | Int# -> Bool isTrue# (Int# x Int# -> Int# -> Int# ># Int# y ) = [] | Bool otherwise = Char# -> Char C# (Int# -> Char# chr# Int# x) Char -> String -> String forall a. a -> [a] -> [a] : Int# -> Int# -> String eftChar (Int# x Int# -> Int# -> Int# +# Int# 1#) Int# y
{-# INLINE [0] efdCharFB #-} efdCharFB :: (Char -> a -> a) -> a -> Int# -> Int# -> a efdCharFB :: forall a. (Char -> a -> a) -> a -> Int# -> Int# -> a efdCharFB Char -> a -> a c a n Int# x1 Int# x2 | Int# -> Bool isTrue# (Int# delta Int# -> Int# -> Int# >=# Int# 0#) = (Char -> a -> a) -> a -> Int# -> Int# -> Int# -> a forall a. (Char -> a -> a) -> a -> Int# -> Int# -> Int# -> a go_up_char_fb Char -> a -> a c a n Int# x1 Int# delta Int# 0x10FFFF# | Bool otherwise = (Char -> a -> a) -> a -> Int# -> Int# -> Int# -> a forall a. (Char -> a -> a) -> a -> Int# -> Int# -> Int# -> a go_dn_char_fb Char -> a -> a c a n Int# x1 Int# delta Int# 0# where !delta :: Int# delta = Int# x2 Int# -> Int# -> Int# -# Int# x1
{-# NOINLINE [1] efdChar #-} efdChar :: Int# -> Int# -> String efdChar :: Int# -> Int# -> String efdChar Int# x1 Int# x2 | Int# -> Bool isTrue# (Int# delta Int# -> Int# -> Int# >=# Int# 0#) = Int# -> Int# -> Int# -> String go_up_char_list Int# x1 Int# delta Int# 0x10FFFF# | Bool otherwise = Int# -> Int# -> Int# -> String go_dn_char_list Int# x1 Int# delta Int# 0# where !delta :: Int# delta = Int# x2 Int# -> Int# -> Int# -# Int# x1
{-# INLINE [0] efdtCharFB #-} efdtCharFB :: (Char -> a -> a) -> a -> Int# -> Int# -> Int# -> a efdtCharFB :: forall a. (Char -> a -> a) -> a -> Int# -> Int# -> Int# -> a efdtCharFB Char -> a -> a c a n Int# x1 Int# x2 Int# lim | Int# -> Bool isTrue# (Int# delta Int# -> Int# -> Int# >=# Int# 0#) = (Char -> a -> a) -> a -> Int# -> Int# -> Int# -> a forall a. (Char -> a -> a) -> a -> Int# -> Int# -> Int# -> a go_up_char_fb Char -> a -> a c a n Int# x1 Int# delta Int# lim | Bool otherwise = (Char -> a -> a) -> a -> Int# -> Int# -> Int# -> a forall a. (Char -> a -> a) -> a -> Int# -> Int# -> Int# -> a go_dn_char_fb Char -> a -> a c a n Int# x1 Int# delta Int# lim where !delta :: Int# delta = Int# x2 Int# -> Int# -> Int# -# Int# x1
{-# NOINLINE [1] efdtChar #-} efdtChar :: Int# -> Int# -> Int# -> String efdtChar :: Int# -> Int# -> Int# -> String efdtChar Int# x1 Int# x2 Int# lim | Int# -> Bool isTrue# (Int# delta Int# -> Int# -> Int# >=# Int# 0#) = Int# -> Int# -> Int# -> String go_up_char_list Int# x1 Int# delta Int# lim | Bool otherwise = Int# -> Int# -> Int# -> String go_dn_char_list Int# x1 Int# delta Int# lim where !delta :: Int# delta = Int# x2 Int# -> Int# -> Int# -# Int# x1
go_up_char_fb :: (Char -> a -> a) -> a -> Int# -> Int# -> Int# -> a
go_up_char_fb :: forall a. (Char -> a -> a) -> a -> Int# -> Int# -> Int# -> a
go_up_char_fb Char -> a -> a
c a
n Int#
x0 Int#
delta Int#
lim
= Int# -> a
go_up Int#
x0
where
go_up :: Int# -> a
go_up Int#
x | Int# -> Bool
isTrue# (Int#
x Int# -> Int# -> Int#
># Int#
lim) = a
n
| Bool
otherwise = Char# -> Char
C# (Int# -> Char#
chr# Int#
x) Char -> a -> a
c Int# -> a
go_up (Int#
x Int# -> Int# -> Int#
+# Int#
delta)
go_dn_char_fb :: (Char -> a -> a) -> a -> Int# -> Int# -> Int# -> a
go_dn_char_fb :: forall a. (Char -> a -> a) -> a -> Int# -> Int# -> Int# -> a
go_dn_char_fb Char -> a -> a
c a
n Int#
x0 Int#
delta Int#
lim
= Int# -> a
go_dn Int#
x0
where
go_dn :: Int# -> a
go_dn Int#
x | Int# -> Bool
isTrue# (Int#
x Int# -> Int# -> Int#
<# Int#
lim) = a
n
| Bool
otherwise = Char# -> Char
C# (Int# -> Char#
chr# Int#
x) Char -> a -> a
c Int# -> a
go_dn (Int#
x Int# -> Int# -> Int#
+# Int#
delta)
go_up_char_list :: Int# -> Int# -> Int# -> String go_up_char_list :: Int# -> Int# -> Int# -> String go_up_char_list Int# x0 Int# delta Int# lim = Int# -> String go_up Int# x0 where go_up :: Int# -> String go_up Int# x | Int# -> Bool isTrue# (Int# x Int# -> Int# -> Int# ># Int# lim) = [] | Bool otherwise = Char# -> Char C# (Int# -> Char# chr# Int# x) Char -> String -> String forall a. a -> [a] -> [a] : Int# -> String go_up (Int# x Int# -> Int# -> Int# +# Int# delta)
go_dn_char_list :: Int# -> Int# -> Int# -> String go_dn_char_list :: Int# -> Int# -> Int# -> String go_dn_char_list Int# x0 Int# delta Int# lim = Int# -> String go_dn Int# x0 where go_dn :: Int# -> String go_dn Int# x | Int# -> Bool isTrue# (Int# x Int# -> Int# -> Int# <# Int# lim) = [] | Bool otherwise = Char# -> Char C# (Int# -> Char# chr# Int# x) Char -> String -> String forall a. a -> [a] -> [a] : Int# -> String go_dn (Int# x Int# -> Int# -> Int# +# Int# delta)
instance Bounded Int where minBound :: Int minBound = Int minInt maxBound :: Int maxBound = Int maxInt
instance Enum Int where
succ :: Int -> Int
succ Int
x
| Int
x Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
forall a. Bounded a => a
maxBound = String -> Int
forall a. String -> a
errorWithoutStackTrace String
"Prelude.Enum.succ{Int}: tried to take succ' of maxBound" | Bool [otherwise](GHC.Base.html#otherwise) = Int [x](#local-6989586621679578308) Int -> Int -> Int forall a. Num a => a -> a -> a [+](GHC.Num.html#%2B) Int 1 pred :: Int -> Int [pred](GHC.Enum.html#pred) Int [x](#local-6989586621679578314) | Int [x](#local-6989586621679578314) Int -> Int -> Bool forall a. Eq a => a -> a -> Bool [==](../https://hackage.haskell.org/package/ghc-prim-0.9.0/docs/src/GHC.Classes.html#%3D%3D/GHC.Classes.html#%3D%3D) Int forall a. Bounded a => a [minBound](GHC.Enum.html#minBound) = String -> Int forall a. String -> a [errorWithoutStackTrace](GHC.Err.html#errorWithoutStackTrace) String "Prelude.Enum.pred{Int}: tried to take pred' of minBound"
| Bool
otherwise = Int
x Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1
toEnum :: Int -> InttoEnum Int x = Int x fromEnum :: Int -> Int fromEnum Int x = Int x
{-# INLINE [enumFrom](GHC.Enum.html#enumFrom) #-}
enumFrom :: Int -> [Int]enumFrom (I# Int# x) = Int# -> Int# -> [Int] eftInt Int# x Int# maxInt# where !(I# Int# maxInt#) = Int maxInt
{-# INLINE [enumFromTo](GHC.Enum.html#enumFromTo) #-}
enumFromTo :: Int -> Int -> [Int]enumFromTo (I# Int# x) (I# Int# y) = Int# -> Int# -> [Int] eftInt Int# x Int# y
{-# INLINE [enumFromThen](GHC.Enum.html#enumFromThen) #-}
enumFromThen :: Int -> Int -> [Int]enumFromThen (I# Int# x1) (I# Int# x2) = Int# -> Int# -> [Int] efdInt Int# x1 Int# x2
{-# INLINE [enumFromThenTo](GHC.Enum.html#enumFromThenTo) #-}
enumFromThenTo :: Int -> Int -> Int -> [Int]enumFromThenTo (I# Int# x1) (I# Int# x2) (I# Int# y) = Int# -> Int# -> Int# -> [Int] efdtInt Int# x1 Int# x2 Int# y
{-# RULES "eftInt" [~1] forall x y. eftInt x y = build (\ c n -> eftIntFB c n x y) "eftIntList" [1] eftIntFB (:) [] = eftInt #-}
{-# NOINLINE [1] eftInt #-} eftInt :: Int# -> Int# -> [Int]
eftInt :: Int# -> Int# -> [Int] eftInt Int# x0 Int# y | Int# -> Bool isTrue# (Int# x0 Int# -> Int# -> Int# ># Int# y) = [] | Bool otherwise = Int# -> [Int] go Int# x0 where go :: Int# -> [Int] go Int# x = Int# -> Int I# Int# x Int -> [Int] -> [Int] forall a. a -> [a] -> [a] : if Int# -> Bool isTrue# (Int# x Int# -> Int# -> Int# ==# Int# y) then [] else Int# -> [Int] go (Int# x Int# -> Int# -> Int# +# Int# 1#)
{-# INLINE [0] eftIntFB #-}
eftIntFB :: (Int -> r -> r) -> r -> Int# -> Int# -> r
eftIntFB :: forall r. (Int -> r -> r) -> r -> Int# -> Int# -> r
eftIntFB Int -> r -> r
c r
n Int#
x0 Int#
y | Int# -> Bool
isTrue# (Int#
x0 Int# -> Int# -> Int#
># Int#
y) = r
n
| Bool
otherwise = Int# -> r
go Int#
x0
where
go :: Int# -> r
go Int#
x = Int# -> Int
I# Int#
x Int -> r -> r
c if Int# -> Bool
isTrue# (Int#
x Int# -> Int# -> Int#
==# Int#
y)
then r
n
else Int# -> r
go (Int#
x Int# -> Int# -> Int#
+# Int#
1#)
{-# RULES "efdtInt" [~1] forall x1 x2 y. efdtInt x1 x2 y = build (\ c n -> efdtIntFB c n x1 x2 y) "efdtIntUpList" [1] efdtIntFB (:) [] = efdtInt #-}
efdInt :: Int# -> Int# -> [Int]
efdInt :: Int# -> Int# -> [Int] efdInt Int# x1 Int# x2 | Int# -> Bool isTrue# (Int# x2 Int# -> Int# -> Int# >=# Int# x1) = case Int maxInt of I# Int# y -> Int# -> Int# -> Int# -> [Int] efdtIntUp Int# x1 Int# x2 Int# y | Bool otherwise = case Int minInt of I# Int# y -> Int# -> Int# -> Int# -> [Int] efdtIntDn Int# x1 Int# x2 Int# y
{-# NOINLINE [1] efdtInt #-} efdtInt :: Int# -> Int# -> Int# -> [Int]
efdtInt :: Int# -> Int# -> Int# -> [Int] efdtInt Int# x1 Int# x2 Int# y | Int# -> Bool isTrue# (Int# x2 Int# -> Int# -> Int# >=# Int# x1) = Int# -> Int# -> Int# -> [Int] efdtIntUp Int# x1 Int# x2 Int# y | Bool otherwise = Int# -> Int# -> Int# -> [Int] efdtIntDn Int# x1 Int# x2 Int# y
{-# INLINE [0] efdtIntFB #-} efdtIntFB :: (Int -> r -> r) -> r -> Int# -> Int# -> Int# -> r efdtIntFB :: forall r. (Int -> r -> r) -> r -> Int# -> Int# -> Int# -> r efdtIntFB Int -> r -> r c r n Int# x1 Int# x2 Int# y | Int# -> Bool isTrue# (Int# x2 Int# -> Int# -> Int# >=# Int# x1) = (Int -> r -> r) -> r -> Int# -> Int# -> Int# -> r forall r. (Int -> r -> r) -> r -> Int# -> Int# -> Int# -> r efdtIntUpFB Int -> r -> r c r n Int# x1 Int# x2 Int# y | Bool otherwise = (Int -> r -> r) -> r -> Int# -> Int# -> Int# -> r forall r. (Int -> r -> r) -> r -> Int# -> Int# -> Int# -> r efdtIntDnFB Int -> r -> r c r n Int# x1 Int# x2 Int# y
efdtIntUp :: Int# -> Int# -> Int# -> [Int]
efdtIntUp :: Int# -> Int# -> Int# -> [Int]
efdtIntUp Int#
x1 Int#
x2 Int#
y
| Int# -> Bool
isTrue# (Int#
y Int# -> Int# -> Int#
<# Int#
x2) = if Int# -> Bool
isTrue# (Int#
y Int# -> Int# -> Int#
<# Int#
x1) then [] else [Int# -> Int
I# Int#
x1]
| Bool
otherwise =
let !delta :: Int#
delta = Int#
x2 Int# -> Int# -> Int#
-# Int#
x1
!y' :: Int#
y' = Int#
y Int# -> Int# -> Int#
-# Int#
delta
go_up :: Int# -> [Int]go_up Int# x | Int# -> Bool isTrue# (Int# x Int# -> Int# -> Int# ># Int# y') = [Int# -> Int I# Int# x] | Bool otherwise = Int# -> Int I# Int# x Int -> [Int] -> [Int] forall a. a -> [a] -> [a] : Int# -> [Int] go_up (Int# x Int# -> Int# -> Int# +# Int# delta) in Int# -> Int I# Int# x1 Int -> [Int] -> [Int] forall a. a -> [a] -> [a] : Int# -> [Int] go_up Int# x2
{-# INLINE [0] efdtIntUpFB #-}
efdtIntUpFB :: (Int -> r -> r) -> r -> Int# -> Int# -> Int# -> r
efdtIntUpFB :: forall r. (Int -> r -> r) -> r -> Int# -> Int# -> Int# -> r
efdtIntUpFB Int -> r -> r
c r
n Int#
x1 Int#
x2 Int#
y
| Int# -> Bool
isTrue# (Int#
y Int# -> Int# -> Int#
<# Int#
x2) = if Int# -> Bool
isTrue# (Int#
y Int# -> Int# -> Int#
<# Int#
x1) then r
n else Int# -> Int
I# Int#
x1 Int -> r -> r
c r
n
| Bool
otherwise =
let !delta :: Int#
delta = Int#
x2 Int# -> Int# -> Int#
-# Int#
x1
!y' :: Int#
y' = Int#
y Int# -> Int# -> Int#
-# Int#
delta
go_up :: Int# -> rgo_up Int#
x | Int# -> Bool
isTrue# (Int#
x Int# -> Int# -> Int#
># Int#
y') = Int# -> Int
I# Int#
x Int -> r -> r
c r
n
| Bool
otherwise = Int# -> Int
I# Int#
x Int -> r -> r
c Int# -> r
go_up (Int#
x Int# -> Int# -> Int#
+# Int#
delta)
in Int# -> Int
I# Int#
x1 Int -> r -> r
c Int# -> r
go_up Int#
x2
efdtIntDn :: Int# -> Int# -> Int# -> [Int]
efdtIntDn :: Int# -> Int# -> Int# -> [Int]
efdtIntDn Int#
x1 Int#
x2 Int#
y
| Int# -> Bool
isTrue# (Int#
y Int# -> Int# -> Int#
># Int#
x2) = if Int# -> Bool
isTrue# (Int#
y Int# -> Int# -> Int#
># Int#
x1) then [] else [Int# -> Int
I# Int#
x1]
| Bool
otherwise =
let !delta :: Int#
delta = Int#
x2 Int# -> Int# -> Int#
-# Int#
x1
!y' :: Int#
y' = Int#
y Int# -> Int# -> Int#
-# Int#
delta
go_dn :: Int# -> [Int]go_dn Int# x | Int# -> Bool isTrue# (Int# x Int# -> Int# -> Int# <# Int# y') = [Int# -> Int I# Int# x] | Bool otherwise = Int# -> Int I# Int# x Int -> [Int] -> [Int] forall a. a -> [a] -> [a] : Int# -> [Int] go_dn (Int# x Int# -> Int# -> Int# +# Int# delta) in Int# -> Int I# Int# x1 Int -> [Int] -> [Int] forall a. a -> [a] -> [a] : Int# -> [Int] go_dn Int# x2
{-# INLINE [0] efdtIntDnFB #-}
efdtIntDnFB :: (Int -> r -> r) -> r -> Int# -> Int# -> Int# -> r
efdtIntDnFB :: forall r. (Int -> r -> r) -> r -> Int# -> Int# -> Int# -> r
efdtIntDnFB Int -> r -> r
c r
n Int#
x1 Int#
x2 Int#
y
| Int# -> Bool
isTrue# (Int#
y Int# -> Int# -> Int#
># Int#
x2) = if Int# -> Bool
isTrue# (Int#
y Int# -> Int# -> Int#
># Int#
x1) then r
n else Int# -> Int
I# Int#
x1 Int -> r -> r
c r
n
| Bool
otherwise =
let !delta :: Int#
delta = Int#
x2 Int# -> Int# -> Int#
-# Int#
x1
!y' :: Int#
y' = Int#
y Int# -> Int# -> Int#
-# Int#
delta
go_dn :: Int# -> rgo_dn Int#
x | Int# -> Bool
isTrue# (Int#
x Int# -> Int# -> Int#
<# Int#
y') = Int# -> Int
I# Int#
x Int -> r -> r
c r
n
| Bool
otherwise = Int# -> Int
I# Int#
x Int -> r -> r
c Int# -> r
go_dn (Int#
x Int# -> Int# -> Int#
+# Int#
delta)
in Int# -> Int
I# Int#
x1 Int -> r -> r
c Int# -> r
go_dn Int#
x2
instance Bounded Word where minBound :: Word minBound = Word 0
#if WORD_SIZE_IN_BITS == 32 maxBound = W# 0xFFFFFFFF## #elif WORD_SIZE_IN_BITS == 64 maxBound :: Word maxBound = Word# -> Word W# Word# 0xFFFFFFFFFFFFFFFF## #else #error Unhandled value for WORD_SIZE_IN_BITS #endif
instance Enum Word where succ :: Word -> Word succ Word x | Word x Word -> Word -> Bool forall a. Eq a => a -> a -> Bool /= Word forall a. Bounded a => a maxBound = Word x Word -> Word -> Word forall a. Num a => a -> a -> a + Word 1 | Bool otherwise = String -> Word forall a. String -> a succError String "Word" pred :: Word -> Word pred Word x | Word x Word -> Word -> Bool forall a. Eq a => a -> a -> Bool /= Word forall a. Bounded a => a minBound = Word x Word -> Word -> Word forall a. Num a => a -> a -> a - Word 1 | Bool otherwise = String -> Word forall a. String -> a predError String "Word" toEnum :: Int -> Word toEnum i :: Int i@(I# Int# i#) | Int i Int -> Int -> Bool forall a. Ord a => a -> a -> Bool >= Int 0 = Word# -> Word W# (Int# -> Word# int2Word# Int# i#) | Bool otherwise = String -> Int -> (Word, Word) -> Word forall a b. Show a => String -> Int -> (a, a) -> b toEnumError String "Word" Int i (Word forall a. Bounded a => a minBound::Word, Word forall a. Bounded a => a maxBound::Word) fromEnum :: Word -> Int fromEnum x :: Word x@(W# Word# x#) | Word x Word -> Word -> Bool forall a. Ord a => a -> a -> Bool <= Word maxIntWord = Int# -> Int I# (Word# -> Int# word2Int# Word# x#) | Bool otherwise = String -> Word -> Int forall a b. Show a => String -> a -> b fromEnumError String "Word" Word x
{-# INLINE [enumFrom](GHC.Enum.html#enumFrom) #-}
enumFrom :: Word -> [Word]enumFrom (W# Word# x#) = Word# -> Word# -> [Word] eftWord Word# x# Word# maxWord# where !(W# Word# maxWord#) = Word forall a. Bounded a => a maxBound
{-# INLINE [enumFromTo](GHC.Enum.html#enumFromTo) #-}
enumFromTo :: Word -> Word -> [Word]enumFromTo (W# Word# x) (W# Word# y) = Word# -> Word# -> [Word] eftWord Word# x Word# y
{-# INLINE [enumFromThen](GHC.Enum.html#enumFromThen) #-}
enumFromThen :: Word -> Word -> [Word]enumFromThen (W# Word# x1) (W# Word# x2) = Word# -> Word# -> [Word] efdWord Word# x1 Word# x2
{-# INLINE [enumFromThenTo](GHC.Enum.html#enumFromThenTo) #-}
enumFromThenTo :: Word -> Word -> Word -> [Word]enumFromThenTo (W# Word# x1) (W# Word# x2) (W# Word# y) = Word# -> Word# -> Word# -> [Word] efdtWord Word# x1 Word# x2 Word# y
maxIntWord :: Word
maxIntWord :: Word maxIntWord = Word# -> Word W# (case Int maxInt of I# Int# i -> Int# -> Word# int2Word# Int# i)
{-# RULES "eftWord" [~1] forall x y. eftWord x y = build (\ c n -> eftWordFB c n x y) "eftWordList" [1] eftWordFB (:) [] = eftWord #-}
{-# NOINLINE [1] eftWord #-} eftWord :: Word# -> Word# -> [Word]
eftWord :: Word# -> Word# -> [Word]
eftWord Word#
x0 Word#
y | Int# -> Bool
isTrue# (Word#
x0 Word# -> Word# -> Int#
gtWord# Word#
y) = []
| Bool
otherwise = Word# -> [Word]
go Word#
x0
where
go :: Word# -> [Word]
go Word#
x = Word# -> Word
W# Word#
x Word -> [Word] -> [Word]
forall a. a -> [a] -> [a]
: if Int# -> Bool
isTrue# (Word#
x Word# -> Word# -> Int#
eqWord# Word#
y)
then []
else Word# -> [Word]
go (Word#
x Word# -> Word# -> Word#
plusWord# Word#
1##)
{-# INLINE [0] eftWordFB #-}
eftWordFB :: (Word -> r -> r) -> r -> Word# -> Word# -> r
eftWordFB :: forall r. (Word -> r -> r) -> r -> Word# -> Word# -> r
eftWordFB Word -> r -> r
c r
n Word#
x0 Word#
y | Int# -> Bool
isTrue# (Word#
x0 Word# -> Word# -> Int#
gtWord# Word#
y) = r
n
| Bool
otherwise = Word# -> r
go Word#
x0
where
go :: Word# -> r
go Word#
x = Word# -> Word
W# Word#
x Word -> r -> r
c if Int# -> Bool
isTrue# (Word#
x Word# -> Word# -> Int#
eqWord# Word#
y)
then r
n
else Word# -> r
go (Word#
x Word# -> Word# -> Word#
plusWord# Word#
1##)
{-# RULES "efdtWord" [~1] forall x1 x2 y. efdtWord x1 x2 y = build (\ c n -> efdtWordFB c n x1 x2 y) "efdtWordUpList" [1] efdtWordFB (:) [] = efdtWord #-}
efdWord :: Word# -> Word# -> [Word]
efdWord :: Word# -> Word# -> [Word]
efdWord Word#
x1 Word#
x2
| Int# -> Bool
isTrue# (Word#
x2 Word# -> Word# -> Int#
geWord# Word#
x1) = case Word
forall a. Bounded a => a
maxBound of W# Word#
y -> Word# -> Word# -> Word# -> [Word]
efdtWordUp Word#
x1 Word#
x2 Word#
y
| Bool
otherwise = case Word
forall a. Bounded a => a
minBound of W# Word#
y -> Word# -> Word# -> Word# -> [Word]
efdtWordDn Word#
x1 Word#
x2 Word#
y
{-# NOINLINE [1] efdtWord #-} efdtWord :: Word# -> Word# -> Word# -> [Word]
efdtWord :: Word# -> Word# -> Word# -> [Word]
efdtWord Word#
x1 Word#
x2 Word#
y
| Int# -> Bool
isTrue# (Word#
x2 Word# -> Word# -> Int#
geWord# Word#
x1) = Word# -> Word# -> Word# -> [Word]
efdtWordUp Word#
x1 Word#
x2 Word#
y
| Bool
otherwise = Word# -> Word# -> Word# -> [Word]
efdtWordDn Word#
x1 Word#
x2 Word#
y
{-# INLINE [0] efdtWordFB #-}
efdtWordFB :: (Word -> r -> r) -> r -> Word# -> Word# -> Word# -> r
efdtWordFB :: forall r. (Word -> r -> r) -> r -> Word# -> Word# -> Word# -> r
efdtWordFB Word -> r -> r
c r
n Word#
x1 Word#
x2 Word#
y
| Int# -> Bool
isTrue# (Word#
x2 Word# -> Word# -> Int#
geWord# Word#
x1) = (Word -> r -> r) -> r -> Word# -> Word# -> Word# -> r
forall r. (Word -> r -> r) -> r -> Word# -> Word# -> Word# -> r
efdtWordUpFB Word -> r -> r
c r
n Word#
x1 Word#
x2 Word#
y
| Bool
otherwise = (Word -> r -> r) -> r -> Word# -> Word# -> Word# -> r
forall r. (Word -> r -> r) -> r -> Word# -> Word# -> Word# -> r
efdtWordDnFB Word -> r -> r
c r
n Word#
x1 Word#
x2 Word#
y
efdtWordUp :: Word# -> Word# -> Word# -> [Word]
efdtWordUp :: Word# -> Word# -> Word# -> [Word]
efdtWordUp Word#
x1 Word#
x2 Word#
y
| Int# -> Bool
isTrue# (Word#
y Word# -> Word# -> Int#
ltWord# Word#
x2) = if Int# -> Bool
isTrue# (Word#
y Word# -> Word# -> Int#
ltWord# Word#
x1) then [] else [Word# -> Word
W# Word#
x1]
| Bool
otherwise =
let !delta :: Word#
delta = Word#
x2 Word# -> Word# -> Word#
minusWord# Word#
x1
!y' :: Word#
y' = Word#
y Word# -> Word# -> Word#
minusWord# Word#
delta
go_up :: Word# -> [Word]go_up Word#
x | Int# -> Bool
isTrue# (Word#
x Word# -> Word# -> Int#
gtWord# Word#
y') = [Word# -> Word
W# Word#
x]
| Bool
otherwise = Word# -> Word
W# Word#
x Word -> [Word] -> [Word]
forall a. a -> [a] -> [a]
: Word# -> [Word]
go_up (Word#
x Word# -> Word# -> Word#
plusWord# Word#
delta)
in Word# -> Word
W# Word#
x1 Word -> [Word] -> [Word]
forall a. a -> [a] -> [a]
: Word# -> [Word]
go_up Word#
x2
{-# INLINE [0] efdtWordUpFB #-}
efdtWordUpFB :: (Word -> r -> r) -> r -> Word# -> Word# -> Word# -> r
efdtWordUpFB :: forall r. (Word -> r -> r) -> r -> Word# -> Word# -> Word# -> r
efdtWordUpFB Word -> r -> r
c r
n Word#
x1 Word#
x2 Word#
y
| Int# -> Bool
isTrue# (Word#
y Word# -> Word# -> Int#
ltWord# Word#
x2) = if Int# -> Bool
isTrue# (Word#
y Word# -> Word# -> Int#
ltWord# Word#
x1) then r
n else Word# -> Word
W# Word#
x1 Word -> r -> r
c r
n
| Bool
otherwise =
let !delta :: Word#
delta = Word#
x2 Word# -> Word# -> Word#
minusWord# Word#
x1
!y' :: Word#
y' = Word#
y Word# -> Word# -> Word#
minusWord# Word#
delta
go_up :: Word# -> rgo_up Word#
x | Int# -> Bool
isTrue# (Word#
x Word# -> Word# -> Int#
gtWord# Word#
y') = Word# -> Word
W# Word#
x Word -> r -> r
c r
n
| Bool
otherwise = Word# -> Word
W# Word#
x Word -> r -> r
c Word# -> r
go_up (Word#
x Word# -> Word# -> Word#
plusWord# Word#
delta)
in Word# -> Word
W# Word#
x1 Word -> r -> r
c Word# -> r
go_up Word#
x2
efdtWordDn :: Word# -> Word# -> Word# -> [Word]
efdtWordDn :: Word# -> Word# -> Word# -> [Word]
efdtWordDn Word#
x1 Word#
x2 Word#
y
| Int# -> Bool
isTrue# (Word#
y Word# -> Word# -> Int#
gtWord# Word#
x2) = if Int# -> Bool
isTrue# (Word#
y Word# -> Word# -> Int#
gtWord# Word#
x1) then [] else [Word# -> Word
W# Word#
x1]
| Bool
otherwise =
let !delta :: Word#
delta = Word#
x2 Word# -> Word# -> Word#
minusWord# Word#
x1
!y' :: Word#
y' = Word#
y Word# -> Word# -> Word#
minusWord# Word#
delta
go_dn :: Word# -> [Word]go_dn Word#
x | Int# -> Bool
isTrue# (Word#
x Word# -> Word# -> Int#
ltWord# Word#
y') = [Word# -> Word
W# Word#
x]
| Bool
otherwise = Word# -> Word
W# Word#
x Word -> [Word] -> [Word]
forall a. a -> [a] -> [a]
: Word# -> [Word]
go_dn (Word#
x Word# -> Word# -> Word#
plusWord# Word#
delta)
in Word# -> Word
W# Word#
x1 Word -> [Word] -> [Word]
forall a. a -> [a] -> [a]
: Word# -> [Word]
go_dn Word#
x2
{-# INLINE [0] efdtWordDnFB #-}
efdtWordDnFB :: (Word -> r -> r) -> r -> Word# -> Word# -> Word# -> r
efdtWordDnFB :: forall r. (Word -> r -> r) -> r -> Word# -> Word# -> Word# -> r
efdtWordDnFB Word -> r -> r
c r
n Word#
x1 Word#
x2 Word#
y
| Int# -> Bool
isTrue# (Word#
y Word# -> Word# -> Int#
gtWord# Word#
x2) = if Int# -> Bool
isTrue# (Word#
y Word# -> Word# -> Int#
gtWord# Word#
x1) then r
n else Word# -> Word
W# Word#
x1 Word -> r -> r
c r
n
| Bool
otherwise =
let !delta :: Word#
delta = Word#
x2 Word# -> Word# -> Word#
minusWord# Word#
x1
!y' :: Word#
y' = Word#
y Word# -> Word# -> Word#
minusWord# Word#
delta
go_dn :: Word# -> rgo_dn Word#
x | Int# -> Bool
isTrue# (Word#
x Word# -> Word# -> Int#
ltWord# Word#
y') = Word# -> Word
W# Word#
x Word -> r -> r
c r
n
| Bool
otherwise = Word# -> Word
W# Word#
x Word -> r -> r
c Word# -> r
go_dn (Word#
x Word# -> Word# -> Word#
plusWord# Word#
delta)
in Word# -> Word
W# Word#
x1 Word -> r -> r
c Word# -> r
go_dn Word#
x2
instance Enum Integer where succ :: Integer -> Integer succ Integer x = Integer x Integer -> Integer -> Integer forall a. Num a => a -> a -> a + Integer 1 pred :: Integer -> Integer pred Integer x = Integer x Integer -> Integer -> Integer forall a. Num a => a -> a -> a - Integer 1 toEnum :: Int -> Integer toEnum (I# Int# n) = Int# -> Integer IS Int# n fromEnum :: Integer -> Int fromEnum Integer n = Integer -> Int integerToInt Integer n
{-# INLINE [enumFrom](GHC.Enum.html#enumFrom) #-}
enumFrom :: Integer -> [Integer]enumFrom Integer x = Integer -> Integer -> [Integer] enumDeltaInteger Integer x Integer 1
{-# INLINE [enumFromThen](GHC.Enum.html#enumFromThen) #-}
enumFromThen :: Integer -> Integer -> [Integer]enumFromThen Integer x Integer y = Integer -> Integer -> [Integer] enumDeltaInteger Integer x (Integer yInteger -> Integer -> Integer forall a. Num a => a -> a -> a -Integer x)
{-# INLINE [enumFromTo](GHC.Enum.html#enumFromTo) #-}
enumFromTo :: Integer -> Integer -> [Integer]enumFromTo Integer x Integer lim = Integer -> Integer -> Integer -> [Integer] enumDeltaToInteger Integer x Integer 1 Integer lim
{-# INLINE [enumFromThenTo](GHC.Enum.html#enumFromThenTo) #-}
enumFromThenTo :: Integer -> Integer -> Integer -> [Integer]enumFromThenTo Integer x Integer y Integer lim = Integer -> Integer -> Integer -> [Integer] enumDeltaToInteger Integer x (Integer yInteger -> Integer -> Integer forall a. Num a => a -> a -> a -Integer x) Integer lim
{-# RULES
"enumDeltaInteger" [1] forall x y. enumDeltaInteger x y = build ([c](#local-6989586621679578580) _ -> enumDeltaIntegerFB c x y)
"efdtInteger" [1] forall x d l. enumDeltaToInteger x d l = build ([c](#local-6989586621679578585) n -> enumDeltaToIntegerFB c n x d l)
"efdtInteger1" [~1] forall x l. enumDeltaToInteger x 1 l = build ([c](#local-6989586621679578590) n -> enumDeltaToInteger1FB c n x l)
"enumDeltaToInteger1FB" [1] forall c n x. enumDeltaToIntegerFB c n x 1 = enumDeltaToInteger1FB c n x
"enumDeltaInteger" [1] enumDeltaIntegerFB (:) = enumDeltaInteger "enumDeltaToInteger" [1] enumDeltaToIntegerFB (:) [] = enumDeltaToInteger "enumDeltaToInteger1" [1] enumDeltaToInteger1FB (:) [] = enumDeltaToInteger1 #-}
{-# INLINE [0] enumDeltaIntegerFB #-}
enumDeltaIntegerFB :: (Integer -> b -> b) -> Integer -> Integer -> b
enumDeltaIntegerFB :: forall b. (Integer -> b -> b) -> Integer -> Integer -> b
enumDeltaIntegerFB Integer -> b -> b
c Integer
x0 Integer
d = Integer -> b
go Integer
x0
where go :: Integer -> b
go Integer
x = Integer
x Integer -> b -> b
forall a b. a -> b -> b
seq (Integer
x Integer -> b -> b
c Integer -> b
go (Integer
xInteger -> Integer -> Integer
forall a. Num a => a -> a -> a
+Integer
d))
{-# NOINLINE [1] enumDeltaInteger #-}
enumDeltaInteger :: Integer -> Integer -> [Integer]
enumDeltaInteger :: Integer -> Integer -> [Integer]
enumDeltaInteger Integer
x Integer
d = Integer
x Integer -> [Integer] -> [Integer]
forall a b. a -> b -> b
seq (Integer
x Integer -> [Integer] -> [Integer]
forall a. a -> [a] -> [a]
: Integer -> Integer -> [Integer]
enumDeltaInteger (Integer
xInteger -> Integer -> Integer
forall a. Num a => a -> a -> a
+Integer
d) Integer
d)
{-# INLINE [0] enumDeltaToIntegerFB #-}
enumDeltaToIntegerFB :: (Integer -> a -> a) -> a -> Integer -> Integer -> Integer -> a enumDeltaToIntegerFB :: forall a. (Integer -> a -> a) -> a -> Integer -> Integer -> Integer -> a enumDeltaToIntegerFB Integer -> a -> a c a n Integer x Integer delta Integer lim | Integer delta Integer -> Integer -> Bool forall a. Ord a => a -> a -> Bool >= Integer 0 = (Integer -> a -> a) -> a -> Integer -> Integer -> Integer -> a forall a. (Integer -> a -> a) -> a -> Integer -> Integer -> Integer -> a up_fb Integer -> a -> a c a n Integer x Integer delta Integer lim | Bool otherwise = (Integer -> a -> a) -> a -> Integer -> Integer -> Integer -> a forall a. (Integer -> a -> a) -> a -> Integer -> Integer -> Integer -> a dn_fb Integer -> a -> a c a n Integer x Integer delta Integer lim
{-# INLINE [0] enumDeltaToInteger1FB #-}
enumDeltaToInteger1FB :: (Integer -> a -> a) -> a
-> Integer -> Integer -> a
enumDeltaToInteger1FB :: forall a. (Integer -> a -> a) -> a -> Integer -> Integer -> a
enumDeltaToInteger1FB Integer -> a -> a
c a
n Integer
x0 Integer
lim = Integer -> a
go (Integer
x0 :: Integer)
where
go :: Integer -> a
go Integer
x | Integer
x Integer -> Integer -> Bool
forall a. Ord a => a -> a -> Bool
> Integer
lim = a
n
| Bool
otherwise = Integer
x Integer -> a -> a
c Integer -> a
go (Integer
xInteger -> Integer -> Integer
forall a. Num a => a -> a -> a
+Integer
1)
{-# NOINLINE [1] enumDeltaToInteger #-} enumDeltaToInteger :: Integer -> Integer -> Integer -> [Integer] enumDeltaToInteger :: Integer -> Integer -> Integer -> [Integer] enumDeltaToInteger Integer x Integer delta Integer lim | Integer delta Integer -> Integer -> Bool forall a. Ord a => a -> a -> Bool >= Integer 0 = Integer -> Integer -> Integer -> [Integer] up_list Integer x Integer delta Integer lim | Bool otherwise = Integer -> Integer -> Integer -> [Integer] dn_list Integer x Integer delta Integer lim
{-# NOINLINE [1] enumDeltaToInteger1 #-} enumDeltaToInteger1 :: Integer -> Integer -> [Integer]
enumDeltaToInteger1 :: Integer -> Integer -> [Integer] enumDeltaToInteger1 Integer x0 Integer lim = Integer -> [Integer] go (Integer x0 :: Integer) where go :: Integer -> [Integer] go Integer x | Integer x Integer -> Integer -> Bool forall a. Ord a => a -> a -> Bool > Integer lim = [] | Bool otherwise = Integer x Integer -> [Integer] -> [Integer] forall a. a -> [a] -> [a] : Integer -> [Integer] go (Integer xInteger -> Integer -> Integer forall a. Num a => a -> a -> a +Integer 1)
up_fb :: (Integer -> a -> a) -> a -> Integer -> Integer -> Integer -> a
up_fb :: forall a.
(Integer -> a -> a) -> a -> Integer -> Integer -> Integer -> a
up_fb Integer -> a -> a
c a
n Integer
x0 Integer
delta Integer
lim = Integer -> a
go (Integer
x0 :: Integer)
where
go :: Integer -> a
go Integer
x | Integer
x Integer -> Integer -> Bool
forall a. Ord a => a -> a -> Bool
> Integer
lim = a
n
| Bool
otherwise = Integer
x Integer -> a -> a
c Integer -> a
go (Integer
xInteger -> Integer -> Integer
forall a. Num a => a -> a -> a
+Integer
delta)
dn_fb :: (Integer -> a -> a) -> a -> Integer -> Integer -> Integer -> a
dn_fb :: forall a.
(Integer -> a -> a) -> a -> Integer -> Integer -> Integer -> a
dn_fb Integer -> a -> a
c a
n Integer
x0 Integer
delta Integer
lim = Integer -> a
go (Integer
x0 :: Integer)
where
go :: Integer -> a
go Integer
x | Integer
x Integer -> Integer -> Bool
forall a. Ord a => a -> a -> Bool
< Integer
lim = a
n
| Bool
otherwise = Integer
x Integer -> a -> a
c Integer -> a
go (Integer
xInteger -> Integer -> Integer
forall a. Num a => a -> a -> a
+Integer
delta)
up_list :: Integer -> Integer -> Integer -> [Integer] up_list :: Integer -> Integer -> Integer -> [Integer] up_list Integer x0 Integer delta Integer lim = Integer -> [Integer] go (Integer x0 :: Integer) where go :: Integer -> [Integer] go Integer x | Integer x Integer -> Integer -> Bool forall a. Ord a => a -> a -> Bool > Integer lim = [] | Bool otherwise = Integer x Integer -> [Integer] -> [Integer] forall a. a -> [a] -> [a] : Integer -> [Integer] go (Integer xInteger -> Integer -> Integer forall a. Num a => a -> a -> a +Integer delta) dn_list :: Integer -> Integer -> Integer -> [Integer] dn_list :: Integer -> Integer -> Integer -> [Integer] dn_list Integer x0 Integer delta Integer lim = Integer -> [Integer] go (Integer x0 :: Integer) where go :: Integer -> [Integer] go Integer x | Integer x Integer -> Integer -> Bool forall a. Ord a => a -> a -> Bool < Integer lim = [] | Bool otherwise = Integer x Integer -> [Integer] -> [Integer] forall a. a -> [a] -> [a] : Integer -> [Integer] go (Integer xInteger -> Integer -> Integer forall a. Num a => a -> a -> a +Integer delta)
instance Enum Natural where succ :: Natural -> Natural succ Natural n = Natural n Natural -> Natural -> Natural forall a. Num a => a -> a -> a + Natural 1 pred :: Natural -> Natural pred Natural n = Natural n Natural -> Natural -> Natural forall a. Num a => a -> a -> a - Natural 1 toEnum :: Int -> Natural toEnum i :: Int i@(I# Int# i#) | Int i Int -> Int -> Bool forall a. Ord a => a -> a -> Bool >= Int 0 = Word# -> Natural naturalFromWord# (Int# -> Word# int2Word# Int# i#) | Bool otherwise = String -> Natural forall a. String -> a errorWithoutStackTrace String "toEnum: unexpected negative Int"
fromEnum :: Natural -> IntfromEnum (NS Word# w) | Int i Int -> Int -> Bool forall a. Ord a => a -> a -> Bool >= Int 0 = Int i where i :: Int i = Int# -> Int I# (Word# -> Int# word2Int# Word# w) fromEnum Natural _ = String -> Int forall a. String -> a errorWithoutStackTrace String "fromEnum: out of Int range"
{-# INLINE [enumFrom](GHC.Enum.html#enumFrom) #-}
enumFrom :: Natural -> [Natural]enumFrom Natural x = Natural -> Natural -> [Natural] enumDeltaNatural Natural x Natural 1
{-# INLINE [enumFromThen](GHC.Enum.html#enumFromThen) #-}
enumFromThen :: Natural -> Natural -> [Natural]enumFromThen Natural x Natural y | Natural x Natural -> Natural -> Bool forall a. Ord a => a -> a -> Bool <= Natural y = Natural -> Natural -> [Natural] enumDeltaNatural Natural x (Natural yNatural -> Natural -> Natural forall a. Num a => a -> a -> a -Natural x) | Bool otherwise = Natural -> Natural -> Natural -> [Natural] enumNegDeltaToNatural Natural x (Natural xNatural -> Natural -> Natural forall a. Num a => a -> a -> a -Natural y) Natural 0
{-# INLINE [enumFromTo](GHC.Enum.html#enumFromTo) #-}
enumFromTo :: Natural -> Natural -> [Natural]enumFromTo Natural x Natural lim = Natural -> Natural -> Natural -> [Natural] enumDeltaToNatural Natural x Natural 1 Natural lim
{-# INLINE [enumFromThenTo](GHC.Enum.html#enumFromThenTo) #-}
enumFromThenTo :: Natural -> Natural -> Natural -> [Natural]enumFromThenTo Natural x Natural y Natural lim | Natural x Natural -> Natural -> Bool forall a. Ord a => a -> a -> Bool <= Natural y = Natural -> Natural -> Natural -> [Natural] enumDeltaToNatural Natural x (Natural yNatural -> Natural -> Natural forall a. Num a => a -> a -> a -Natural x) Natural lim | Bool otherwise = Natural -> Natural -> Natural -> [Natural] enumNegDeltaToNatural Natural x (Natural xNatural -> Natural -> Natural forall a. Num a => a -> a -> a -Natural y) Natural lim
enumDeltaNatural :: Natural -> Natural -> [Natural] enumDeltaNatural :: Natural -> Natural -> [Natural] enumDeltaNatural !Natural x Natural d = Natural x Natural -> [Natural] -> [Natural] forall a. a -> [a] -> [a] : Natural -> Natural -> [Natural] enumDeltaNatural (Natural xNatural -> Natural -> Natural forall a. Num a => a -> a -> a +Natural d) Natural d
{-# INLINE enumDeltaToNatural #-} enumDeltaToNatural :: Natural -> Natural -> Natural -> [Natural] enumDeltaToNatural :: Natural -> Natural -> Natural -> [Natural] enumDeltaToNatural Natural x0 Natural delta Natural lim = Natural -> [Natural] go Natural x0 where go :: Natural -> [Natural] go Natural x | Natural x Natural -> Natural -> Bool forall a. Ord a => a -> a -> Bool > Natural lim = [] | Bool otherwise = Natural x Natural -> [Natural] -> [Natural] forall a. a -> [a] -> [a] : Natural -> [Natural] go (Natural xNatural -> Natural -> Natural forall a. Num a => a -> a -> a +Natural delta)
{-# INLINE enumNegDeltaToNatural #-} enumNegDeltaToNatural :: Natural -> Natural -> Natural -> [Natural] enumNegDeltaToNatural :: Natural -> Natural -> Natural -> [Natural] enumNegDeltaToNatural Natural x0 Natural ndelta Natural lim = Natural -> [Natural] go Natural x0 where go :: Natural -> [Natural] go Natural x | Natural x Natural -> Natural -> Bool forall a. Ord a => a -> a -> Bool < Natural lim = [] | Natural x Natural -> Natural -> Bool forall a. Ord a => a -> a -> Bool >= Natural ndelta = Natural x Natural -> [Natural] -> [Natural] forall a. a -> [a] -> [a] : Natural -> [Natural] go (Natural xNatural -> Natural -> Natural forall a. Num a => a -> a -> a -Natural ndelta) | Bool otherwise = [Natural x]
deriving instance Bounded Levity
deriving instance Bounded VecCount
deriving instance Enum VecCount