{-# OPTIONS_GHC -funbox-strict-fields #-}
{-# LANGUAGE NoImplicitPrelude, BangPatterns #-}
module Phladiprelio.General.Datatype where
import GHC.Base
import GHC.List
import Data.Char (isDigit, isSpace)
import Text.Read (readMaybe)
import GHC.Num ((*))
import Data.Maybe (fromMaybe)
data Phladiprelio t a b = Phl {
forall (t :: * -> *) a b. Phladiprelio t a b -> t a
inputData :: t a,
forall (t :: * -> *) a b. Phladiprelio t a b -> t a -> t b
convF :: t a -> t b
}
data BasicLan a = L1 !a | L2 !Double deriving (BasicLan a -> BasicLan a -> Bool
forall a. Eq a => BasicLan a -> BasicLan a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: BasicLan a -> BasicLan a -> Bool
$c/= :: forall a. Eq a => BasicLan a -> BasicLan a -> Bool
== :: BasicLan a -> BasicLan a -> Bool
$c== :: forall a. Eq a => BasicLan a -> BasicLan a -> Bool
Eq, BasicLan a -> BasicLan a -> Bool
BasicLan a -> BasicLan a -> Ordering
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall {a}. Ord a => Eq (BasicLan a)
forall a. Ord a => BasicLan a -> BasicLan a -> Bool
forall a. Ord a => BasicLan a -> BasicLan a -> Ordering
forall a. Ord a => BasicLan a -> BasicLan a -> BasicLan a
min :: BasicLan a -> BasicLan a -> BasicLan a
$cmin :: forall a. Ord a => BasicLan a -> BasicLan a -> BasicLan a
max :: BasicLan a -> BasicLan a -> BasicLan a
$cmax :: forall a. Ord a => BasicLan a -> BasicLan a -> BasicLan a
>= :: BasicLan a -> BasicLan a -> Bool
$c>= :: forall a. Ord a => BasicLan a -> BasicLan a -> Bool
> :: BasicLan a -> BasicLan a -> Bool
$c> :: forall a. Ord a => BasicLan a -> BasicLan a -> Bool
<= :: BasicLan a -> BasicLan a -> Bool
$c<= :: forall a. Ord a => BasicLan a -> BasicLan a -> Bool
< :: BasicLan a -> BasicLan a -> Bool
$c< :: forall a. Ord a => BasicLan a -> BasicLan a -> Bool
compare :: BasicLan a -> BasicLan a -> Ordering
$ccompare :: forall a. Ord a => BasicLan a -> BasicLan a -> Ordering
Ord)
data BasicUkr = U1 {-# UNPACK #-} !Char | U2 !Double deriving (BasicUkr -> BasicUkr -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: BasicUkr -> BasicUkr -> Bool
$c/= :: BasicUkr -> BasicUkr -> Bool
== :: BasicUkr -> BasicUkr -> Bool
$c== :: BasicUkr -> BasicUkr -> Bool
Eq, Eq BasicUkr
BasicUkr -> BasicUkr -> Bool
BasicUkr -> BasicUkr -> Ordering
BasicUkr -> BasicUkr -> BasicUkr
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: BasicUkr -> BasicUkr -> BasicUkr
$cmin :: BasicUkr -> BasicUkr -> BasicUkr
max :: BasicUkr -> BasicUkr -> BasicUkr
$cmax :: BasicUkr -> BasicUkr -> BasicUkr
>= :: BasicUkr -> BasicUkr -> Bool
$c>= :: BasicUkr -> BasicUkr -> Bool
> :: BasicUkr -> BasicUkr -> Bool
$c> :: BasicUkr -> BasicUkr -> Bool
<= :: BasicUkr -> BasicUkr -> Bool
$c<= :: BasicUkr -> BasicUkr -> Bool
< :: BasicUkr -> BasicUkr -> Bool
$c< :: BasicUkr -> BasicUkr -> Bool
compare :: BasicUkr -> BasicUkr -> Ordering
$ccompare :: BasicUkr -> BasicUkr -> Ordering
Ord)
readBasic0
:: Double
-> (String -> [a])
-> ([a] -> [Double])
-> String
-> [Double]
readBasic0 :: forall a.
Double
-> (String -> [a]) -> ([a] -> [Double]) -> String -> [Double]
readBasic0 = forall a.
(String -> Bool)
-> Double
-> (String -> [a])
-> ([a] -> [Double])
-> String
-> [Double]
readBasic0G (Bool -> Bool
not forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. [a] -> Bool
null forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. (a -> Bool) -> [a] -> [a]
filter (Bool -> Bool
not forall b c a. (b -> c) -> (a -> b) -> a -> c
. Char -> Bool
isSpace))
readBasic :: (String -> [a]) -> ([a] -> [Double]) -> String -> [Double]
readBasic = forall a.
Double
-> (String -> [a]) -> ([a] -> [Double]) -> String -> [Double]
readBasic0 Double
1.0
{-# INLINE readBasic #-}
readBasic0G
:: (String -> Bool)
-> Double
-> (String -> [a])
-> ([a] -> [Double])
-> String
-> [Double]
readBasic0G :: forall a.
(String -> Bool)
-> Double
-> (String -> [a])
-> ([a] -> [Double])
-> String
-> [Double]
readBasic0G String -> Bool
p Double
temp String -> [a]
fConvA [a] -> [Double]
fConvD xs :: String
xs@(Char
'_':String
ys) = (String -> Double
readU2 String
ws forall a. Num a => a -> a -> a
* Double
temp) forall a. a -> [a] -> [a]
: forall a.
(String -> Bool)
-> Double
-> (String -> [a])
-> ([a] -> [Double])
-> String
-> [Double]
readBasic0G String -> Bool
p Double
temp String -> [a]
fConvA [a] -> [Double]
fConvD String
qs
where (String
ws, String
qs) = forall a. (a -> Bool) -> [a] -> ([a], [a])
span Char -> Bool
isDigit String
ys
readBasic0G String -> Bool
p Double
temp String -> [a]
fConvA [a] -> [Double]
fConvD xs :: String
xs@(Char
_:String
_)
| forall a. [a] -> Bool
null String
us = [Double]
dc
| Bool
otherwise = [Double]
dc forall a. Monoid a => a -> a -> a
`mappend` ((String -> Double
readU2 String
ws forall a. Num a => a -> a -> a
* Double
d) forall a. a -> [a] -> [a]
: forall a.
(String -> Bool)
-> Double
-> (String -> [a])
-> ([a] -> [Double])
-> String
-> [Double]
readBasic0G String -> Bool
p Double
d String -> [a]
fConvA [a] -> [Double]
fConvD String
qs)
where (String
ts, String
us) = forall a. (a -> Bool) -> [a] -> ([a], [a])
break (forall a. Eq a => a -> a -> Bool
== Char
'_') String
xs
dc :: [Double]
dc
| forall a. [a] -> Bool
null String
ts Bool -> Bool -> Bool
|| Bool -> Bool
not (String -> Bool
p String
ts) = [Double
temp]
| Bool
otherwise = [a] -> [Double]
fConvD forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> [a]
fConvA forall a b. (a -> b) -> a -> b
$ String
ts
d :: Double
d = forall a. [a] -> a
last [Double]
dc
vs :: String
vs = forall a. (a -> Bool) -> [a] -> [a]
dropWhile (forall a. Eq a => a -> a -> Bool
== Char
'_') String
us
(String
ws, String
qs) = forall a. (a -> Bool) -> [a] -> ([a], [a])
span Char -> Bool
isDigit String
vs
readBasic0G String -> Bool
_ Double
_ String -> [a]
_ [a] -> [Double]
_ String
_ = []
readBasicG :: (String -> Bool)
-> (String -> [a]) -> ([a] -> [Double]) -> String -> [Double]
readBasicG String -> Bool
p = forall a.
(String -> Bool)
-> Double
-> (String -> [a])
-> ([a] -> [Double])
-> String
-> [Double]
readBasic0G String -> Bool
p Double
1.0
{-# INLINE readBasicG #-}
readU2 :: String -> Double
readU2 :: String -> Double
readU2 xs :: String
xs@(Char
y:String
ys) = forall a. a -> Maybe a -> a
fromMaybe Double
1.0 (forall a. Read a => String -> Maybe a
readMaybe (Char
yforall a. a -> [a] -> [a]
:Char
'.'forall a. a -> [a] -> [a]
:String
ys)::Maybe Double)
readU2 String
_ = Double
1.0
{-# INLINABLE readU2 #-}