module Data.Connection.Optic.Float (
    f32u32
  , u32f32
) where

import Data.Connection.Float (Ulp32)
import Data.Int
import Data.Prd.Nan (Nan)
import Data.Profunctor.Optic.Grate
import Data.Profunctor.Optic.Import
import Data.Word
import qualified Data.Connection.Float as F

-- >>> coview f32u32 (Ulp32 0)
-- 0.0
-- >>> coview f32u32 (Ulp32 1)
-- 1.0e-45
f32u32 :: Grate' Float Ulp32
f32u32 = connected F.f32u32

u32f32 :: Grate' Ulp32 Float
u32f32 = connected F.u32f32

{-
-- >>> coview f32i32 Nan
-- NaN
-- >>> zipsWith i32f32 (/) (Def 0) (Def 0)
-- Nan
f32i32 :: Grate' Float (Nan Int64)
f32i32 = connected F.f32i32
  
i32f32 :: Grate' (Nan Int64) Float
i32f32 = connected F.i32f32
-}