File: isValidNatural.hs

package info (click to toggle)
ghc 9.6.6-4
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 158,216 kB
  • sloc: haskell: 648,228; ansic: 81,656; cpp: 11,808; javascript: 8,444; sh: 5,831; fortran: 3,527; python: 3,277; asm: 2,523; makefile: 2,298; yacc: 1,570; lisp: 532; xml: 196; perl: 145; csh: 2
file content (19 lines) | stat: -rw-r--r-- 614 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
{-# LANGUAGE MagicHash #-}
{-# LANGUAGE UnboxedTuples #-}

import GHC.Num.Natural
import GHC.Num.BigNat
import GHC.Exts
import GHC.IO

main = do
   let
      maxWord = fromIntegral (maxBound :: Word)
      invalid = NB (bigNatOne# (# #)) -- 1 would fit into the NS constructor.

   -- byteArray whose size is not a multiple of Word size
   invalid2 <- IO $ \s -> case newByteArray# 27# s of
                           (# s', mba #) -> case unsafeFreezeByteArray# mba s' of
                              (# s'', ba #) -> (# s'', NB ba #)

   print $ map naturalCheck [0, 1, maxWord, maxWord + 1, invalid, invalid2]