{-# LANGUAGE AllowAmbiguousTypes #-}

module Telescope.Fits.BitPix where

import GHC.Int
import Prelude hiding (lookup)


data BitPix
  = BPInt8
  | BPInt16
  | BPInt32
  | BPInt64
  | BPFloat
  | BPDouble
  deriving (Int -> BitPix -> ShowS
[BitPix] -> ShowS
BitPix -> String
(Int -> BitPix -> ShowS)
-> (BitPix -> String) -> ([BitPix] -> ShowS) -> Show BitPix
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> BitPix -> ShowS
showsPrec :: Int -> BitPix -> ShowS
$cshow :: BitPix -> String
show :: BitPix -> String
$cshowList :: [BitPix] -> ShowS
showList :: [BitPix] -> ShowS
Show, BitPix -> BitPix -> Bool
(BitPix -> BitPix -> Bool)
-> (BitPix -> BitPix -> Bool) -> Eq BitPix
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: BitPix -> BitPix -> Bool
== :: BitPix -> BitPix -> Bool
$c/= :: BitPix -> BitPix -> Bool
/= :: BitPix -> BitPix -> Bool
Eq)


bitPixBits :: BitPix -> Int
bitPixBits :: BitPix -> Int
bitPixBits BitPix
bp = BitPix -> Int
bitPixBytes BitPix
bp Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
8


bitPixBytes :: BitPix -> Int
bitPixBytes :: BitPix -> Int
bitPixBytes BitPix
bp =
  case BitPix
bp of
    BitPix
BPInt8 -> Int
1
    BitPix
BPInt16 -> Int
2
    BitPix
BPInt32 -> Int
4
    BitPix
BPInt64 -> Int
8
    BitPix
BPFloat -> Int
4
    BitPix
BPDouble -> Int
8


class IsBitPix a where
  bitPix :: BitPix


instance IsBitPix Int8 where
  bitPix :: BitPix
bitPix = BitPix
BPInt8
instance IsBitPix Int16 where
  bitPix :: BitPix
bitPix = BitPix
BPInt16
instance IsBitPix Int32 where
  bitPix :: BitPix
bitPix = BitPix
BPInt32
instance IsBitPix Int64 where
  bitPix :: BitPix
bitPix = BitPix
BPInt64
instance IsBitPix Float where
  bitPix :: BitPix
bitPix = BitPix
BPFloat
instance IsBitPix Double where
  bitPix :: BitPix
bitPix = BitPix
BPDouble