@@ -15,9 +15,7 @@ intervalSubType :: AtomType -> AtomType
1515intervalSubType typ = if isIntervalAtomType typ then
1616 case typ of
1717 ConstructedAtomType _ tvMap ->
18− case M.lookup "a" tvMap of
19− Nothing -> err
20− Just typ' -> typ'
18+ fromMaybe err (M.lookup "a" tvMap)
2119 _ -> err
2220 else
2321 err
@@ -121,7 +119,14 @@ isIntervalAtomType (ConstructedAtomType nam tvMap) =
121119isIntervalAtomType _ = False
122120
123121intervalOverlaps :: Atom -> Atom -> Either AtomFunctionError Bool
124−intervalOverlaps (ConstructedAtom dCons1 typ1 (i1start:i1end:(BoolAtom i1startopen):(BoolAtom i1endopen):[])) (ConstructedAtom dCons2 typ2 (i2start:i2end:(BoolAtom i2startopen):(BoolAtom i2endopen):[])) = do
122+intervalOverlaps (ConstructedAtom dCons1 typ1 [i1start,
123+ i1end,
124+ BoolAtom i1startopen,
125+ BoolAtom i1endopen]) (ConstructedAtom dCons2 typ2
126+ [i2start,
127+ i2end,
128+ BoolAtom i2startopen,
129+ BoolAtom i2endopen]) = do
125130 when (dCons1 /= "Interval" || dCons2 /= "Interval" || not (isIntervalAtomType typ1) || not (isIntervalAtomType typ2)) (Left AtomFunctionTypeMismatchError)
126131 cmp1 <- atomCompare i1start i2end
127132 cmp2 <- atomCompare i2start i1end