implicit-0.4.0.0: Graphics/Implicit/FastIntUtil.hs
{- ORMOLU_DISABLE -}
-- Implicit CAD. Copyright (C) 2011, Christopher Olah (chris@colah.ca)
-- Copyright 2014-2019, Julia Longtin (julial@turinglace.com)
-- Released under the GNU AGPLV3+, see LICENSE
-- Use existing instances for the wrapped types rather than manually manking them
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module Graphics.Implicit.FastIntUtil (Fastℕ(Fastℕ), toFastℕ, fromFastℕ) where
import Prelude (Integral, Num, Eq, Ord, Enum, Real, Show, Read, Int, id)
class FastN n where
fromFastℕ :: Fastℕ -> n
toFastℕ :: n -> Fastℕ
instance FastN Int where
fromFastℕ (Fastℕ a) = a
{-# INLINABLE fromFastℕ #-}
toFastℕ = Fastℕ
{-# INLINABLE toFastℕ #-}
instance FastN Fastℕ where
fromFastℕ = id
{-# INLINABLE fromFastℕ #-}
toFastℕ = id
{-# INLINABLE toFastℕ #-}
-- System integers, meant to go fast, and have no chance of wrapping 2^31.
newtype Fastℕ = Fastℕ Int
deriving (Show, Read, Eq, Ord, Num, Enum, Integral, Real)