From 777e8c945aa511b9af3b43eda1d994b99a03b8a2 Mon Sep 17 00:00:00 2001 From: Martin Clausen Date: Fri, 18 Oct 2024 23:08:26 +0200 Subject: [PATCH] Update to use modern Haskell. --- .gitignore | 1 + src/Observations.hs | 16 +++++++++------- src/XmlUtils.hs | 4 ++-- 3 files changed, 12 insertions(+), 9 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4c61acd --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +dist-newstyle \ No newline at end of file diff --git a/src/Observations.hs b/src/Observations.hs index 4fcdebf..4b380cd 100644 --- a/src/Observations.hs +++ b/src/Observations.hs @@ -74,14 +74,16 @@ unTEs (TEs x) = x instance Functor TimedEvents where fmap f (TEs tes) = TEs [ (t,f e) | (t,e) <- tes ] -instance Monoid a => Monoid (TimedEvents a) where - mempty = TEs [] - mappend as bs = - fmap mappendMergeResult (mergeEvents as bs) +instance Semigroup a => Semigroup (TimedEvents a) where + as <> bs = + fmap mappendMergeResult (mergeEvents as bs) where - mappendMergeResult (OnlyInLeft a) = a - mappendMergeResult (InBoth a b) = a `mappend` b - mappendMergeResult (OnlyInRight b) = b + mappendMergeResult (OnlyInLeft a) = a + mappendMergeResult (InBoth a b) = a <> b + mappendMergeResult (OnlyInRight b) = b + +instance Semigroup a => Monoid (TimedEvents a) where + mempty = TEs [] -- mconcat = --TODO: optimise mconcat to do more balanced merges diff --git a/src/XmlUtils.hs b/src/XmlUtils.hs index ac1815e..f9f00eb 100644 --- a/src/XmlUtils.hs +++ b/src/XmlUtils.hs @@ -10,13 +10,13 @@ import Text.XML.HaXml.Types (QName(..)) import Text.XML.HaXml.XmlContent import Data.Time -attrStr :: Monad m => QName -> Element t -> m String +attrStr :: MonadFail m => QName -> Element t -> m String attrStr n (Elem _ as _) = case lookup n as of Nothing -> fail ("expected attribute " ++ localName n) Just av -> return (attr2str av) -attrRead :: (Read b, Monad m) => QName -> Element t -> m b +attrRead :: (Read b, MonadFail m) => QName -> Element t -> m b attrRead n e = do str <- attrStr n e case reads str of