{-# OPTIONS_HADDOCK show-extensions #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE BangPatterns #-}
module Phladiprelio.Coeffs (
CoeffTwo(..)
, Coeffs2
, isEmpty
, isPair
, fstCF
, sndCF
, readCF
) where
import GHC.Base
import GHC.List
import Data.Maybe (isNothing,fromMaybe,fromJust)
import Text.Read (readMaybe)
data CoeffTwo a = CF0 | CF2 (Maybe a) (Maybe a) deriving (CoeffTwo a -> CoeffTwo a -> Bool
forall a. Eq a => CoeffTwo a -> CoeffTwo a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CoeffTwo a -> CoeffTwo a -> Bool
$c/= :: forall a. Eq a => CoeffTwo a -> CoeffTwo a -> Bool
== :: CoeffTwo a -> CoeffTwo a -> Bool
$c== :: forall a. Eq a => CoeffTwo a -> CoeffTwo a -> Bool
Eq)
isEmpty :: CoeffTwo a -> Bool
isEmpty :: forall a. CoeffTwo a -> Bool
isEmpty CoeffTwo a
CF0 = Bool
True
isEmpty CoeffTwo a
_ = Bool
False
isPair :: CoeffTwo a -> Bool
isPair :: forall a. CoeffTwo a -> Bool
isPair CoeffTwo a
CF0 = Bool
False
isPair CoeffTwo a
_ = Bool
True
fstCF :: CoeffTwo a -> Maybe a
fstCF :: forall a. CoeffTwo a -> Maybe a
fstCF (CF2 Maybe a
x Maybe a
_) = Maybe a
x
fstCF CoeffTwo a
_ = forall a. Maybe a
Nothing
sndCF :: CoeffTwo a -> Maybe a
sndCF :: forall a. CoeffTwo a -> Maybe a
sndCF (CF2 Maybe a
_ Maybe a
y) = Maybe a
y
sndCF CoeffTwo a
_ = forall a. Maybe a
Nothing
readCF :: String -> Coeffs2
readCF :: String -> Coeffs2
readCF String
xs
| forall a. (a -> Bool) -> [a] -> Bool
any (forall a. Eq a => a -> a -> Bool
== Char
'_') String
xs = let (!Maybe Double
ys,!Maybe Double
zs) = (\(String
ks,String
ts) -> (forall a. Read a => String -> Maybe a
readMaybe String
ks::Maybe Double,forall a. Read a => String -> Maybe a
readMaybe (forall a. Int -> [a] -> [a]
drop Int
1 String
ts)::Maybe Double)) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. (a -> Bool) -> [a] -> ([a], [a])
break (forall a. Eq a => a -> a -> Bool
== Char
'_') forall a b. (a -> b) -> a -> b
$ String
xs in
if (forall a. Maybe a -> Bool
isNothing Maybe Double
ys Bool -> Bool -> Bool
&& forall a. Maybe a -> Bool
isNothing Maybe Double
zs) then forall a. CoeffTwo a
CF0 else forall a. Maybe a -> Maybe a -> CoeffTwo a
CF2 Maybe Double
ys Maybe Double
zs
| Bool
otherwise = forall a. CoeffTwo a
CF0
type Coeffs2 = CoeffTwo Double