diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -4,6 +4,10 @@
 
 ## Released changes
 
+### 0.4.0.3
+
+- fix terminal spamming due to process abortion on Windows
+
 ### 0.4.0.2
 
 - make resilient to IO errors due to parallelism or abort
diff --git a/call-alloy.cabal b/call-alloy.cabal
--- a/call-alloy.cabal
+++ b/call-alloy.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           call-alloy
-version:        0.4.0.2
+version:        0.4.0.3
 synopsis:       A simple library to call Alloy given a specification
 description:    Please see the README on GitHub at <https://github.com/marcellussiegburg/call-alloy#readme>
 category:       Language
diff --git a/src/Language/Alloy/Internal/Call.hs b/src/Language/Alloy/Internal/Call.hs
--- a/src/Language/Alloy/Internal/Call.hs
+++ b/src/Language/Alloy/Internal/Call.hs
@@ -36,8 +36,17 @@
 import Control.Concurrent.Extra         (Lock, newLock, withLock)
 import Control.Exception                (IOException, bracket, catch)
 import Control.Monad                    (unless, when)
+import Control.Monad.Extra              (whenJust)
 import Data.ByteString                  (ByteString)
 import Data.ByteString.Char8            (unpack)
+import Data.IORef (
+  IORef,
+  atomicWriteIORef,
+#ifdef mingw32_HOST_OS
+  newIORef,
+#endif
+  readIORef,
+  )
 import Data.List                        (intercalate)
 import Data.List.Split                  (splitOn)
 import Data.Maybe                       (fromMaybe)
@@ -45,14 +54,16 @@
 import System.FilePath
   (searchPathSeparator)
 import System.IO (
+#ifndef mingw32_HOST_OS
   BufferMode (..),
+  hSetBuffering,
+#endif
   Handle,
   hClose,
   hFlush,
   hIsEOF,
   hPutStr,
   hPutStrLn,
-  hSetBuffering,
   stderr,
   )
 import System.IO.Unsafe                 (unsafePerformIO)
@@ -163,6 +174,9 @@
   (Just hin, Just hout, Just herr, ph) <- return p
 #ifndef mingw32_HOST_OS
   hSetBuffering hin NoBuffering
+  let abort = Nothing
+#else
+  abort <- Just <$> newIORef False
 #endif
   let evaluateAlloy' = do
         hPutStr hin content
@@ -173,11 +187,11 @@
             warn = "Maybe not complete instance was sent to Alloy "
             explain = "(Are timeouts set? Make sure they are not too small!): "
         putErrLn ("Warning: " ++ warn ++ explain ++ err)
-  withTimeout hin hout herr ph (timeout config) $ do
+  withTimeout hin hout herr ph abort (timeout config) $ do
     (out, err) <- fst <$> concurrently
       (concurrently (getOutput hout) (getOutput herr))
       evaluateAlloy
-    printContentOnError ph
+    printContentOnError abort ph
     let err' = removeInfoLines err
     unless (null err') $ fail $ unpack $ BS.unlines err'
     return $ fmap (BS.intercalate "\n")
@@ -197,9 +211,10 @@
     getOutput h = catch
       (getOutput' h)
       (\(_ :: IOException) -> return [partialInstance])
-    printContentOnError ph = do
+    printContentOnError abort ph = do
       code <- waitForProcess ph
-      when (code == ExitFailure 1)
+      aborted <- maybe (return False) readIORef abort
+      when (code == ExitFailure 1 && not aborted)
         $ putOutLn $ "Failed parsing the Alloy code:\n" <> content
 
 partialInstance :: ByteString
@@ -260,14 +275,17 @@
   -- ^ the error handle (of the worker) to close
   -> ProcessHandle
   -- ^ the worker process handle
+  -> Maybe (IORef Bool)
+  -- ^ the IORef to communicate process abortion on Windows
   -> Maybe Int
   -- ^ the timeout (Nothing if no timeout)
   -> IO a
   -- ^ some action interacting with the worker and its handles
   -> IO a
-withTimeout _ _ _ _  Nothing  p = p
-withTimeout i o e ph (Just t) p = withAsync p $ \a -> do
+withTimeout _ _ _ _  _     Nothing  p = p
+withTimeout i o e ph abort (Just t) p = withAsync p $ \a -> do
   threadDelay t
+  whenJust abort (`atomicWriteIORef` True)
   mapConcurrently_ id [
     hClose e,
     hClose o,
diff --git a/src/Language/Alloy/Parser.hs b/src/Language/Alloy/Parser.hs
--- a/src/Language/Alloy/Parser.hs
+++ b/src/Language/Alloy/Parser.hs
@@ -62,7 +62,7 @@
 combineEntries :: [Entries (,)] -> AlloyInstance
 combineEntries = foldr createOrInsert M.empty
   where
-    createOrInsert (s, e) ys = M.alter (Just . alterSig e) s ys
+    createOrInsert (s, e) = M.alter (Just . alterSig e) s
     alterSig e Nothing  = e { relation = uncurry M.singleton $ relation e}
     alterSig e (Just y) = y { relation = uncurry M.insert (relation e) (relation y) }
 
