{-# OPTIONS_GHC -funbox-strict-fields #-}
{-# LANGUAGE NoImplicitPrelude, BangPatterns #-}

module Phladiprelio.General.Datatype where

import GHC.Base
import GHC.List
import Data.Char (isDigit)
import Text.Read
import GHC.Num ((*))

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 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)

readBasicUkr0 
 :: Double
 -> (String -> [a])
 -> ([a] -> [Double])
 -> String 
 -> [Double]
readBasicUkr0 :: forall a.
Double
-> (String -> [a]) -> ([a] -> [Double]) -> String -> [Double]
readBasicUkr0 Double
temp String -> [a]
fConvA [a] -> [Double]
fConvD xs :: String
xs@(Char
_:String
_) = [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.
Double
-> (String -> [a]) -> ([a] -> [Double]) -> String -> [Double]
readBasicUkr0 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 = [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
readBasicUkr0 Double
_ String -> [a]
_ [a] -> [Double]
_ String
_ = []

readBasicUkr :: (String -> [a]) -> ([a] -> [Double]) -> String -> [Double]
readBasicUkr = forall a.
Double
-> (String -> [a]) -> ([a] -> [Double]) -> String -> [Double]
readBasicUkr0 Double
1.0
{-# INLINE readBasicUkr #-}

readU2 :: String -> Double
readU2 :: String -> Double
readU2 xs :: String
xs@(Char
y:String
ys) = forall a. Read a => String -> a
read (Char
yforall a. a -> [a] -> [a]
:Char
'.'forall a. a -> [a] -> [a]
:String
ys)::Double