import Data.So %doubleLit fromDouble public export interface FromDouble ty where fromDouble : Double -> ty %allow_overloads fromDouble record Newtype where constructor MkNewtype wrapped : Double FromDouble Newtype where fromDouble = MkNewtype Show Newtype where showPrec p (MkNewtype v) = showCon p "MkNewtype" $ showArg v record InUnit where constructor MkInUnit value : Double 0 inBounds : So (0 <= value && value <= 1) Show InUnit where showPrec p (MkInUnit v _) = showCon p "MkInUnit" $ showArg v ++ " _" namespace InUnit public export fromDouble : (v : Double) -> {auto 0 prf : So (0 <= v && v <= 1)} -> InUnit fromDouble v = MkInUnit v prf main : IO () main = do printLn $ the InUnit 0.25 printLn $ the Newtype 123.456