diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
--- a/.travis.yml
+++ /dev/null
@@ -1,70 +0,0 @@
----
-sudo: false
-cache:
-  directories:
-    - $HOME/.stack
-    - $HOME/.cabal
-    - $HOME/.ghc
-addons:
-  apt:
-    packages:
-      - libgmp3-dev
-matrix:
-  include:
-
-    # Linux
-    - env: TARGET=x86_64-unkown-linux-gnu
-      language: python
-
-    # OS X
-    - env: TARGET=x86_64-apple-darwin
-      os: osx
-      language: default
-
-  allow_failures:
-    - env: TARGET="x86_64-apple-darwin"
-
-before_install:
-  - mkdir -p ~/.local/bin
-  - export PATH=$HOME/.local/bin:$PATH
-  - |
-    if [ `uname` = "Darwin" ]
-    then
-      curl --insecure -L https://www.stackage.org/stack/osx-x86_64 | tar xz --strip-components=1 --include '*/stack' -C ~/.local/bin
-    else
-      curl -L https://www.stackage.org/stack/linux-x86_64 | tar xz --wildcards --strip-components=1 -C ~/.local/bin '*/stack'
-    fi
-  - chmod a+x ~/.local/bin/stack
-
-install:
-  - stack --no-terminal --install-ghc build --only-dependencies
-
-script:
-  # - cabal new-build --happy-options='-gcsa' --alex-options='-g'
-  - stack --no-terminal build --haddock --no-haddock-deps --test --bench --no-run-tests --no-run-benchmarks
-  - curl -sL https://raw.githubusercontent.com/vmchale/tomlcheck/master/sh/check | sh -s .atsfmt.toml
-  - stack build
-  - |
-    if [ `uname` = "Darwin" ]
-    then
-      export BINPATH="$(find .stack-work -name atsfmt -perm 755 | tail -n1)"
-    else
-      export BINPATH="$(find -name atsfmt -executable | tail -n1)"
-    fi
-  - echo $BINPATH
-  - mv $BINPATH atsfmt-$TARGET
-  - ls atsfmt-$TARGET
-
-deploy:
-  api_key:
-    secure: "STSYpNRgAF+w51ncDr95/KiASc1tTj+kEyDmz+uLZlU3VoB3m6YNZClKDGG/UHPpOI08rkliLZzao5nNGs/IgBjOGZEQ5ybZPpMU8+ooUKbR+GCR+7BqbegJotlHKgl2EB6+qVv94mpZiHwUTnX/MJBxnnixqXfGiILlUM3QE/bDbFdPfnaLlX/Kp5GgEiruryWpaJkTnoeK7jmmxdV7k6+BRtSLz9/8Uyn+UC96Z3tCzEB8E6DBCbzGXy2dsGXqyEfUUvBcVWRhgfMyAQp33qv1b9ERZhgHO7qjwdGUGwYJzIdXaVJGcz1mnNU3giH/XAewzu4TeSPNrby+9CrHsbS2Vr13rnGUt6dyKQE6ez+fRRLfOj6yOj+mNlO2AHmKphtp8R90HnrKivxszLcWNOvP2nLIaY2/hqdMAfbojO+dmXBmNxtaaq9NuH9qtrh62cCMCqtGteEREcfd0vO83vw2wRYkhBpQ1dBh88f3DBPZl+IQk228Ort3F8ZHpLMvHvvuc0tQORmad0YC/WsUjbyzQbJP9phgz7r2vRgbla46u3CElwNhMd5uglgmz9cNXizCFeQLtk9aZWE9YtOtVcqg9uEH0rmtWzf2RFeZb+PbMt709wMs9pae734p2G8aikz7MHqIPO27a3lbJ1I9d7ZFyq6SdtpdS1e3ziTmWDk="
-  file: atsfmt-$TARGET
-  on:
-    tags: true
-  provider: releases
-  skip_cleanup: true
-
-branches:
-  only:
-    - /\d+\.\d+\.\d+\.\d+.*$/
-    - master
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@
 <img alt="Screenshot of sample results" src=https://github.com/vmchale/ats-format/raw/master/atsfmt2.png>
 
 This is a code formatter for [ATS](http://www.ats-lang.org/). It is
-a work-in-progress, but it can handle a good portion of the language already.
+a work-in-progress.
 
 If you find something that's not listed in `TODO.md` feel free to open
 an issue. Code samples that were formatted into something ugly are also welcome.
@@ -39,7 +39,7 @@
 
 ```bash
  $ cabal update
- $ cabal new-install ats-format --happy-options='-gcsa' --alex-options='-g' --symlink-bindir ~/.cabal/bin -O2
+ $ cabal new-install ats-format --happy-options='-gcsa' --alex-options='-g' -O2
 ```
 
 ## License
diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -2,7 +2,8 @@
 import           Distribution.Simple
 
 main :: IO ()
-main = setManpath >>
-    writeManpages "man/atsfmt.1" "atsfmt.1" >>
-    writeBashCompletions "atsfmt" >>
-    defaultMain
+main = mconcat [ setManpath
+               , writeManpages "man/atsfmt.1" "atsfmt.1"
+               , writeBashCompletions "atsfmt"
+               , defaultMain
+               ]
diff --git a/app/Main.hs b/app/Main.hs
--- a/app/Main.hs
+++ b/app/Main.hs
@@ -73,7 +73,7 @@
 main = execParser wrapper >>= pick
 
 printFail :: String -> IO a
-printFail = const exitFailure <=< hPutStr stderr
+printFail = pure exitFailure <=< hPutStr stderr
 
 defaultConfig :: FilePath -> IO ()
 defaultConfig = flip writeFile $(embedStringFile ".atsfmt.toml")
@@ -134,5 +134,5 @@
 pick (Program (Just p) False nc _)  = (genErr nc . parse) =<< readFile p
 pick (Program Nothing _ nc False)   = (genErr nc . parse) =<< getContents
 pick (Program Nothing _ _ True)     = defaultConfig ".atsfmt.toml"
-pick (Program (Just p) True True _) = inplace p (fmap printATS . fancyError . parse)
-pick (Program (Just p) True _ _)    = inplace p ((printCustom <=< fancyError) . parse)
+pick (Program (Just p) True True _) = inplace p (fmap ((<> "\n") . printATS) . fancyError . parse)
+pick (Program (Just p) True _ _)    = inplace p ((fmap (<> "\n") . printCustom <=< fancyError) . parse)
diff --git a/appveyor.yml b/appveyor.yml
deleted file mode 100644
--- a/appveyor.yml
+++ /dev/null
@@ -1,35 +0,0 @@
----
-
-build: off
-
-before_test:
-  - set PATH=C:\Program Files\Git\mingw64\bin;%PATH%
-
-  - curl -sS -ostack.zip -L --insecure http://www.stackage.org/stack/windows-i386
-  - 7z x stack.zip stack.exe
-
-clone_folder: "c:\\stack"
-environment:
-  global:
-    STACK_ROOT: "c:\\sr"
-
-test_script:
-  - stack setup > nul
-  - echo "" | stack --no-terminal install
-  - ps: Get-ChildItem . -name -recurse atsfmt.exe
-  - ps: Copy-Item c:\\stack\\.stack-work\\install\\afd8a623\\bin\\atsfmt.exe atsfmt-x86_64-pc-windows.exe
-  - ps: Push-AppveyorArtifact atsfmt-x86_64-pc-windows.exe
-
-deploy:
-  artifacts: atsfmt-x86_64-pc-windows.exe
-  provider: GitHub
-  on:
-    appveyor_repo_tag: true
-  auth_token:
-    secure: 0qzMr6xmEwRoj/9TJOgDuW/LXWfGVM/4A7kvAXGe0BAwWCF13AWE2SARrYkyc3ji
-
-branches:
-  only:
-    # Release tags
-    - master
-    - /\d+\.\d+\.\d+\.\d+.*$/
diff --git a/ats-format.cabal b/ats-format.cabal
--- a/ats-format.cabal
+++ b/ats-format.cabal
@@ -1,54 +1,58 @@
-name:                ats-format
-version:             0.2.0.22
-synopsis:            A source-code formatter for ATS
-description:         An opinionated source-code formatter for [ATS](http://www.ats-lang.org/).
-license:             BSD3
-license-file:        LICENSE
-author:              Vanessa McHale
-maintainer:          vamchale@gmail.com
-copyright:           Copyright: (c) 2017-2018 Vanessa McHale
-category:            Parser, Language, ATS, Development
-build-type:          Custom
-extra-doc-files:     README.md
-data-files:          .travis.yml
-                   , appveyor.yml
-extra-source-files:  stack.yaml
-                   , .atsfmt.toml
-                   , man/atsfmt.1
-cabal-version:       1.18
+cabal-version: 1.18
+name: ats-format
+version: 0.2.0.25
+license: BSD3
+license-file: LICENSE
+copyright: Copyright: (c) 2017-2018 Vanessa McHale
+maintainer: vamchale@gmail.com
+author: Vanessa McHale
+synopsis: A source-code formatter for ATS
+description:
+    An opinionated source-code formatter for [ATS](http://www.ats-lang.org/).
+category: Parser, Language, ATS, Development
+build-type: Custom
+extra-source-files:
+    .atsfmt.toml
+    man/atsfmt.1
+extra-doc-files: README.md
 
+source-repository head
+    type: darcs
+    location: https://hub.darcs.net/vmchale/ats
+
 custom-setup
-  setup-depends:   base
-                 , Cabal
-                 , cli-setup >= 0.1.0.2
+    setup-depends: base -any,
+                   Cabal -any,
+                   cli-setup >=0.1.0.2
 
-Flag development {
-  Description: Enable `-Werror`
-  manual: True
-  default: False
-}
+flag development
+    description:
+        Enable `-Werror`
+    default: False
+    manual: True
 
 executable atsfmt
-  hs-source-dirs:      app
-  main-is:             Main.hs
-  other-modules:       Paths_ats_format
-  build-depends:       base >= 4.10 && < 5
-                     , language-ats >= 0.1.1.10
-                     , optparse-applicative
-                     , htoml-megaparsec >= 1.1.0.0
-                     , text
-                     , ansi-wl-pprint
-                     , directory
-                     , unordered-containers
-                     , process
-                     , file-embed
-  default-language:    Haskell2010
-  if flag(development)
-    ghc-options:       -Werror
-  if impl(ghc >= 8.0)
-    ghc-options:       -Wincomplete-uni-patterns -Wincomplete-record-updates -Wcompat
-  ghc-options:         -Wall 
-
-source-repository head
-  type:     darcs
-  location: https://hub.darcs.net/vmchale/ats
+    main-is: Main.hs
+    hs-source-dirs: app
+    other-modules:
+        Paths_ats_format
+    default-language: Haskell2010
+    ghc-options: -Wall
+    build-depends:
+        base >=4.9 && <5,
+        language-ats >=0.1.1.10,
+        optparse-applicative -any,
+        htoml-megaparsec >=1.1.0.0,
+        text -any,
+        ansi-wl-pprint -any,
+        directory -any,
+        unordered-containers -any,
+        process -any,
+        file-embed -any
+    
+    if flag(development)
+        ghc-options: -Werror
+    
+    if impl(ghc >=8.0)
+        ghc-options: -Wincomplete-uni-patterns -Wincomplete-record-updates
+                     -Wcompat
diff --git a/man/atsfmt.1 b/man/atsfmt.1
--- a/man/atsfmt.1
+++ b/man/atsfmt.1
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pandoc 2.1.1
+.\" Automatically generated by Pandoc 2.1.3
 .\"
 .TH "atsfmt (1)" "" "" "" ""
 .hy
@@ -13,7 +13,7 @@
 .PP
 atsfmt \-\-default\-config
 .PP
-ac file.dats | atsfmt
+cat file.dats | atsfmt
 .PP
 atsfmt \[en]default\-config
 .SH DESCRIPTION
diff --git a/stack.yaml b/stack.yaml
deleted file mode 100644
--- a/stack.yaml
+++ /dev/null
@@ -1,16 +0,0 @@
----
-resolver: lts-10.5
-packages:
-  - '.'
-extra-deps:
-  - ansi-wl-pprint-0.6.8.2
-  - htoml-megaparsec-1.1.0.1
-  - composition-prelude-1.1.0.2
-  - dirstream-1.0.3
-  - hspec-dirstream-0.3.0.0
-  - cli-setup-0.1.0.3
-  - language-ats-1.0.0.0
-flags:
-  ats-format:
-    development: false
-extra-package-dbs: []
