File: FromIntegral.hs

package info (click to toggle)
haskell-arithmoi 0.13.2.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 964 kB
  • sloc: haskell: 10,379; makefile: 3
file content (152 lines) | stat: -rw-r--r-- 3,308 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
-- |
-- Module:      Math.NumberTheory.Utils.FromIntegral
-- Copyright:   (c) 2017 Andrew Lelechenko
-- Licence:     MIT
-- Maintainer:  Andrew Lelechenko <andrew.lelechenko@gmail.com>
--
-- Monomorphic `fromIntegral`.
--

{-# LANGUAGE CPP #-}

module Math.NumberTheory.Utils.FromIntegral
  ( wordToInt
  , wordToInteger
  , intToWord
  , intToInt8
  , intToInt64
  , int8ToInt64
  , intToWord8
  , intToWord64
  , int8ToInt
  , int64ToInt
  , word8ToInt
  , word64ToInt
  , intToInteger
  , int16ToInteger
  , int64ToInteger
  , word64ToInteger
  , naturalToInteger
  , integerToNatural
  , integerToWord
  , integerToWord64
  , integerToInt
  , integerToInt64
  , intToNatural
  , naturalToInt
  , intToDouble
  , fromIntegral'
  ) where

import Data.Int
import Data.Word
import Numeric.Natural

wordToInt :: Word -> Int
wordToInt = fromIntegral
{-# INLINE wordToInt #-}

wordToInteger :: Word -> Integer
wordToInteger = fromIntegral
{-# INLINE wordToInteger #-}

intToWord :: Int -> Word
intToWord = fromIntegral
{-# INLINE intToWord #-}

intToInt8 :: Int -> Int8
intToInt8 = fromIntegral
{-# INLINE intToInt8 #-}

intToInt64 :: Int -> Int64
intToInt64 = fromIntegral
{-# INLINE intToInt64 #-}

int8ToInt64 :: Int8 -> Int64
int8ToInt64 = fromIntegral
{-# INLINE int8ToInt64 #-}

intToWord8 :: Int -> Word8
intToWord8 = fromIntegral
{-# INLINE intToWord8 #-}

intToWord64 :: Int -> Word64
intToWord64 = fromIntegral
{-# INLINE intToWord64 #-}

int8ToInt :: Int8 -> Int
int8ToInt = fromIntegral
{-# INLINE int8ToInt #-}

int64ToInt :: Int64 -> Int
int64ToInt = fromIntegral
{-# INLINE int64ToInt #-}

word8ToInt :: Word8 -> Int
word8ToInt = fromIntegral
{-# INLINE word8ToInt #-}

word64ToInt :: Word64 -> Int
word64ToInt = fromIntegral
{-# INLINE word64ToInt #-}

intToInteger :: Int -> Integer
intToInteger = fromIntegral
{-# INLINE intToInteger #-}

int16ToInteger :: Int16 -> Integer
int16ToInteger = fromIntegral
{-# INLINE int16ToInteger #-}

int64ToInteger :: Int64 -> Integer
int64ToInteger = fromIntegral
{-# INLINE int64ToInteger #-}

word64ToInteger :: Word64 -> Integer
word64ToInteger = fromIntegral
{-# INLINE word64ToInteger #-}

naturalToInteger :: Natural -> Integer
naturalToInteger = fromIntegral
{-# INLINE naturalToInteger #-}

integerToNatural :: Integer -> Natural
integerToNatural = fromIntegral'
{-# INLINE integerToNatural #-}

integerToWord :: Integer -> Word
integerToWord = fromIntegral
{-# INLINE integerToWord #-}

integerToWord64 :: Integer -> Word64
integerToWord64 = fromIntegral
{-# INLINE integerToWord64 #-}

integerToInt :: Integer -> Int
integerToInt = fromIntegral
{-# INLINE integerToInt #-}

integerToInt64 :: Integer -> Int64
integerToInt64 = fromIntegral
{-# INLINE integerToInt64 #-}

intToNatural :: Int -> Natural
intToNatural = fromIntegral
{-# INLINE intToNatural #-}

naturalToInt :: Natural -> Int
naturalToInt = fromIntegral
{-# INLINE naturalToInt #-}

intToDouble :: Int -> Double
intToDouble = fromIntegral
{-# INLINE intToDouble #-}

fromIntegral' :: (Integral a, Num b) => a -> b
#if __GLASGOW_HASKELL__ == 900 && __GLASGOW_HASKELL_PATCHLEVEL1__ == 1
-- Cannot use fromIntegral because of https://gitlab.haskell.org/ghc/ghc/-/issues/19411
fromIntegral' = fromInteger . toInteger
#else
fromIntegral' = fromIntegral
#endif
{-# INLINE fromIntegral' #-}