diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,10 @@
 
 ## Unreleased changes
 
+## 0.1.2.1 -- 2020-11-08
+
+* Handle case where final result is partial.
+
 ## 0.1.2.0 -- 2020-11-08
 
 * Pass a parsed JSON Value rather than the Value in ResultHandler.
diff --git a/minizinc-process.cabal b/minizinc-process.cabal
--- a/minizinc-process.cabal
+++ b/minizinc-process.cabal
@@ -4,7 +4,7 @@
 -- http://haskell.org/cabal/users-guide/
 
 name:                minizinc-process
-version:             0.1.2.0
+version:             0.1.2.1
 synopsis:            A set of helpers to call minizinc models.
 description:         MiniZinc is a language and a toolchain to solve discrete optimization problems. This package provides simple wrappers around the MiniZinc executable to pass inputs and read outputs.
 homepage:       https://github.com/lucasdicioccio/minizinc-process#readme
@@ -42,4 +42,3 @@
                      , stringsearch
                      , text
   default-language:    Haskell2010
-
diff --git a/src/Process/Minizinc.hs b/src/Process/Minizinc.hs
--- a/src/Process/Minizinc.hs
+++ b/src/Process/Minizinc.hs
@@ -158,16 +158,7 @@
        -> b
        -> ResultHandler answer b
        -> IO b
-    go out parsebuf buf v1 handler
-      | ByteString.null buf = do
-           eof <- hIsEOF out
-           if eof
-           then
-             inputFinished v1
-           else do
-             dat <- ByteString.hGetLine out
-             go out parsebuf dat v1 handler
-      | otherwise = do
+    go out parsebuf buf v1 handler = do
            case parsebuf buf of
              Done remainderBuf stateVal -> do
                (v2, nextHandler) <- (handleNext handler) v1 (reduce stateVal)
@@ -177,7 +168,20 @@
              Fail _ _ err -> do
                (v2,_) <- (handleNext handler) v1 (InternalError err)
                finalizeFailure v2
-             Partial f -> go out f "" v1 handler
+             Partial f -> do
+               -- NOTE: on End-Of-File we attempt to feed an empty byte to
+               -- conclude the parse.
+               -- Thus the real "final marked" is when the Handle is at EOF and
+               -- the input chunk is empty.
+               -- A more explicit final-result marker could benefit the
+               -- implementation of ResultHandler.
+               eof <- hIsEOF out
+               case (eof, ByteString.null buf) of
+                 (True, True) -> inputFinished v1
+                 (True, False) -> go out f "" v1 handler
+                 _             -> do
+                     dat <- ByteString.hGetLine out
+                     go out f dat v1 handler
 
     inputFinished = pure
     userFinished = pure
