{-# language BangPatterns #-}
{-# language RoleAnnotations #-}
{-# language Safe #-}
module Data.CompactSequence.Internal.Size where
data Twice a
data Sz1
data Sz2
data Sz3
data Sz4
data Sz5
data Sz6
data Sz7
data Sz8
data Sz9
data Sz10
data Sz11
data Sz12
data Sz13
data Sz14
data Sz15
data Sz16
data Sz17
data Sz18
data Sz19
newtype Size n = Size Int
type role Size nominal
getSize :: Size n -> Int
getSize (Size n) = n
twice :: Size n -> Size (Twice n)
twice (Size n) = Size (2*n)
half :: Size (Twice m) -> Size m
half (Size n) = Size (n `quot` 2)
one :: Size Sz1
one = Size 1
sz1 :: Size Sz1
sz1 = Size 1
sz2 :: Size Sz2
sz2 = Size 2
sz3 :: Size Sz3
sz3 = Size 3
sz4 :: Size Sz4
sz4 = Size 4
sz5 :: Size Sz5
sz5 = Size 5
sz6 :: Size Sz6
sz6 = Size 6
sz7 :: Size Sz7
sz7 = Size 7
sz8 :: Size Sz8
sz8 = Size 8
sz9 :: Size Sz9
sz9 = Size 9
sz10 :: Size Sz10
sz10 = Size 10
sz11 :: Size Sz11
sz11 = Size 11
sz12 :: Size Sz12
sz12 = Size 12
sz13 :: Size Sz13
sz13 = Size 13
sz14 :: Size Sz14
sz14 = Size 14
sz15 :: Size Sz15
sz15 = Size 15
sz16 :: Size Sz16
sz16 = Size 16
sz17 :: Size Sz17
sz17 = Size 17
sz18 :: Size Sz18
sz18 = Size 18
sz19 :: Size Sz19
sz19 = Size 19