{-# LANGUAGE DefaultSignatures #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE InstanceSigs #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverlappingInstances #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeSynonymInstances #-}
{-# OPTIONS_GHC -fno-warn-deprecated-flags #-}
module WithCli.Argument where
import Data.Orphans ()
import Prelude ()
import Prelude.Compat
import Data.List
import Data.Proxy
import Text.Read
class Argument a where
argumentType :: Proxy a -> String
parseArgument :: String -> Maybe a
instance Argument String where
argumentType :: Proxy String -> String
argumentType Proxy String
Proxy = String
"STRING"
parseArgument :: String -> Maybe String
parseArgument = forall a. a -> Maybe a
Just
instance Argument Int where
argumentType :: Proxy Int -> String
argumentType Proxy Int
_ = String
"INTEGER"
parseArgument :: String -> Maybe Int
parseArgument = forall a. Read a => String -> Maybe a
readMaybe
instance Argument Integer where
argumentType :: Proxy Integer -> String
argumentType Proxy Integer
_ = String
"INTEGER"
parseArgument :: String -> Maybe Integer
parseArgument = forall a. Read a => String -> Maybe a
readMaybe
instance Argument Float where
argumentType :: Proxy Float -> String
argumentType Proxy Float
_ = String
"NUMBER"
parseArgument :: String -> Maybe Float
parseArgument = forall n. (RealFloat n, Read n) => String -> Maybe n
readFloat
instance Argument Double where
argumentType :: Proxy Double -> String
argumentType Proxy Double
_ = String
"NUMBER"
parseArgument :: String -> Maybe Double
parseArgument = forall n. (RealFloat n, Read n) => String -> Maybe n
readFloat
readFloat :: (RealFloat n, Read n) => String -> Maybe n
readFloat :: forall n. (RealFloat n, Read n) => String -> Maybe n
readFloat String
s = case forall a. Read a => String -> Maybe a
readMaybe String
s of
Just n
n -> forall a. a -> Maybe a
Just n
n
Maybe n
Nothing
| String
"." forall a. Eq a => [a] -> [a] -> Bool
`isPrefixOf` String
s -> forall a. Read a => String -> Maybe a
readMaybe (String
"0" forall a. [a] -> [a] -> [a]
++ String
s)
| Bool
otherwise -> forall a. Maybe a
Nothing