{-# LANGUAGE Safe #-} {-# LANGUAGE PatternGuards #-} import qualified Data.Text as T import qualified Data.Text.IO as TI import qualified Data.List as L import Data.Monoid import Data.Maybe import Control.Applicative (!-!)::[a]->Int->Maybe a [] !-! _ = Nothing (x:xs) !-! 0 = Just x (x:xs) !-! n = xs !-! (n-1) (<$~>)::Functor f => f a -> (a -> b) -> f b (<$~>)=flip (<$>) maybeRead s |[(x,"")]<-(reads s)=Just x |otherwise = Nothing getLines::Int->IO T.Text getLines 1 = TI.getLine getLines n = (<>) <$> ((<>) <$> TI.getLine <*> return (T.pack " ")) <*> (getLines$n-1) run main_f n= getLines n <$~> T.split (==' ') <$~> fmap T.unpack <$~> main_f <$~> fmap show <$~> fromMaybe "error" >>= putStrLn main_ list = do let get n = maybeRead=<<(list !-! n)::Maybe Float x1<-get 0 y1<-get 1 x2<-get 2 y2<-get 3 let x_distance = x1+x2 let y_distance = y2-y1 return$x1/x_distance*y_distance+y1 main = run main_ 2