Did I do something wrong? Here is the code (apologies for the mess):
-------------
{-# LANGUAGE NoMonomorphismRestriction #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE TypeFamilies #-}
import Diagrams.Prelude
import Diagrams.Backend.SVG.CmdLine
import qualified Diagrams.TwoD.Path.Boolean as B
vector1, vector2, vector3 :: V2 Double
vector1 = unitX # rotate (tau / 12 @@ rad)
vector2 = unitX # rotate (tau / 12 + tau / 3 @@ rad)
vector3 = unitX # rotate (tau / 12 - tau / 3 @@ rad)
center1, center2, center3 :: P2 Double
center1 = origin .+^ vector1
center2 = origin .+^ vector2
center3 = origin .+^ vector3
border, path1, path2, path3 :: Path V2 Double
border = square 6 # scaleY 1.1
path1 = circle (sqrt 3) # moveTo center1
path2 = circle (sqrt 3) # moveTo center2
path3 = circle (sqrt 3) # moveTo center3
intersectionABC, negationABC, onlyA, onlyB, onlyC, onlyABnotC, onlyACnotB :: Diagram B
intersectionABC = fc green (strokePath (B.intersection Winding (B.intersection Winding path1 path2) path3))
negationABC = fc red (strokePath (B.difference Winding border (B.union Winding (path1 <> path2 <> path3))))
onlyA = fc orange (strokePath (B.difference Winding (reversePath path1) (B.union Winding (path2 <> path3))))
onlyB = fc yellow (strokePath (B.difference Winding path2 (B.union Winding (path1 <> path3))))
onlyC = fc purple (strokePath (B.difference Winding path3 (B.union Winding (path1 <> path2))))
onlyABnotC = fc blue (strokePath (B.difference Winding (B.intersection Winding path1 path2) path3))
onlyACnotB = fc blue (strokePath (B.difference Winding (B.intersection Winding path1 path3) path2))
--- onlyACnotB causes, it seems, the runtime error "Prelude.maximum: empty list"
main = mainWith (negationABC <> intersectionABC <> onlyA <> onlyB <> onlyC <> onlyABnotC <> onlyACnotB)