emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/haskell-tng-mode 6e4849c 112/385: some compilation test ca


From: ELPA Syncer
Subject: [nongnu] elpa/haskell-tng-mode 6e4849c 112/385: some compilation test cases
Date: Tue, 5 Oct 2021 23:59:12 -0400 (EDT)

branch: elpa/haskell-tng-mode
commit 6e4849cc574dd67d02b17097ee5bee9b14075e03
Author: Tseen She <ts33n.sh3@gmail.com>
Commit: Tseen She <ts33n.sh3@gmail.com>

    some compilation test cases
---
 haskell-tng-compile.el             |   10 +
 test/src/ghc-8.4.4-error.compile   |   23 +
 test/src/ghc-8.4.4-warning.compile |   29 +
 test/src/hspec-failure.compile     |  743 ++++++++++
 test/src/tasty-failure.compile     | 2756 ++++++++++++++++++++++++++++++++++++
 5 files changed, 3561 insertions(+)

diff --git a/haskell-tng-compile.el b/haskell-tng-compile.el
index cfcc193..3625f3a 100644
--- a/haskell-tng-compile.el
+++ b/haskell-tng-compile.el
@@ -10,8 +10,18 @@
 ;;
 ;;; Code:
 
+(require 'compile)
+(require 'ansi-color)
+
 ;; FIXME implement batch compilation
 
+;; TODO prettify-symbol rules for home dirs and project dirs, etc
+
+(defvar haskell-tng-compile:regexp-alist
+)
+
+;;(define-compilation-mode )
+
 ;; FIXME how to test batch compilation? Canned responses for the errors and
 ;;       perhaps an interactive call on a small no-dep project, like ffunctor.
 
diff --git a/test/src/ghc-8.4.4-error.compile b/test/src/ghc-8.4.4-error.compile
new file mode 100644
index 0000000..3b786a4
--- /dev/null
+++ b/test/src/ghc-8.4.4-error.compile
@@ -0,0 +1,23 @@
+Resolving dependencies...
+Build profile: -w ghc-8.4.4 -O0
+In order, the following will be built (use -v for more details):
+ - stackage-to-hackage-1.1.0 (lib) (first run)
+ - stackage-to-hackage-1.1.0 (exe:stackage-to-hackage) (first run)
+ - stack2cabal-1.0.2 (exe:stack2cabal) (first run)
+Configuring library for stackage-to-hackage-1.1.0..
+Preprocessing library for stackage-to-hackage-1.1.0..
+Building library for stackage-to-hackage-1.1.0..
+[1 of 2] Compiling StackageToHackage.Stackage ( 
lib/StackageToHackage/Stackage.hs, 
/home/tseenshe/stack2cabal/dist-newstyle/build/x86_64-linux/ghc-8.4.4/stackage-to-hackage-1.1.0/noopt/build/StackageToHackage/Stackage.o
 )
+[2 of 2] Compiling StackageToHackage.Hackage ( 
lib/StackageToHackage/Hackage.hs, 
/home/tseenshe/stack2cabal/dist-newstyle/build/x86_64-linux/ghc-8.4.4/stackage-to-hackage-1.1.0/noopt/build/StackageToHackage/Hackage.o
 )
+
+lib/StackageToHackage/Hackage.hs:33:16: error:
+    parse error on input ‘=’
+    Perhaps you need a 'let' in a 'do' block?
+    e.g. 'let x = 5' instead of 'x = 5'
+   |
+33 |       resolver = sconcat resolvers
+   |                ^
+cabal: Failed to build stackage-to-hackage-1.1.0 (which is required by
+exe:stackage-to-hackage from stackage-to-hackage-1.1.0 and exe:stack2cabal
+from stack2cabal-1.0.2).
+
diff --git a/test/src/ghc-8.4.4-warning.compile 
b/test/src/ghc-8.4.4-warning.compile
new file mode 100644
index 0000000..6d02ee8
--- /dev/null
+++ b/test/src/ghc-8.4.4-warning.compile
@@ -0,0 +1,29 @@
+Resolving dependencies...
+Build profile: -w ghc-8.4.4 -O0
+In order, the following will be built (use -v for more details):
+ - stackage-to-hackage-1.1.0 (lib) (first run)
+ - stackage-to-hackage-1.1.0 (exe:stackage-to-hackage) (first run)
+ - stack2cabal-1.0.2 (exe:stack2cabal) (first run)
+Configuring library for stackage-to-hackage-1.1.0..
+Preprocessing library for stackage-to-hackage-1.1.0..
+Building library for stackage-to-hackage-1.1.0..
+[1 of 2] Compiling StackageToHackage.Stackage ( 
lib/StackageToHackage/Stackage.hs, 
/home/tseenshe/stack2cabal/dist-newstyle/build/x86_64-linux/ghc-8.4.4/stackage-to-hackage-1.1.0/noopt/build/StackageToHackage/Stackage.o
 )
+[2 of 2] Compiling StackageToHackage.Hackage ( 
lib/StackageToHackage/Hackage.hs, 
/home/tseenshe/stack2cabal/dist-newstyle/build/x86_64-linux/ghc-8.4.4/stackage-to-hackage-1.1.0/noopt/build/StackageToHackage/Hackage.o
 )
+
+lib/StackageToHackage/Hackage.hs:13:1: warning: [-Wunused-imports]
+    The qualified import of ‘Data.ByteString’ is redundant
+      except perhaps to import instances from ‘Data.ByteString’
+    To import instances alone, use: import Data.ByteString()
+   |
+13 | import qualified Data.ByteString              as BS
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Configuring executable 'stackage-to-hackage' for stackage-to-hackage-1.1.0..
+Configuring executable 'stack2cabal' for stack2cabal-1.0.2..
+Preprocessing executable 'stackage-to-hackage' for stackage-to-hackage-1.1.0..
+Building executable 'stackage-to-hackage' for stackage-to-hackage-1.1.0..
+Preprocessing executable 'stack2cabal' for stack2cabal-1.0.2..
+Building executable 'stack2cabal' for stack2cabal-1.0.2..
+[1 of 1] Compiling Main             ( exe/Main.hs, 
/home/tseenshe/stack2cabal/dist-newstyle/build/x86_64-linux/ghc-8.4.4/stackage-to-hackage-1.1.0/x/stackage-to-hackage/noopt/build/stackage-to-hackage/stackage-to-hackage-tmp/Main.o
 )
+[1 of 1] Compiling Main             ( exe/Main.hs, 
/home/tseenshe/stack2cabal/dist-newstyle/build/x86_64-linux/ghc-8.4.4/stack2cabal-1.0.2/x/stack2cabal/noopt/build/stack2cabal/stack2cabal-tmp/Main.o
 )
+Linking 
/home/tseenshe/stack2cabal/dist-newstyle/build/x86_64-linux/ghc-8.4.4/stack2cabal-1.0.2/x/stack2cabal/noopt/build/stack2cabal/stack2cabal
 ...
+Linking 
/home/tseenshe/stack2cabal/dist-newstyle/build/x86_64-linux/ghc-8.4.4/stackage-to-hackage-1.1.0/x/stackage-to-hackage/noopt/build/stackage-to-hackage/stackage-to-hackage
 ...
diff --git a/test/src/hspec-failure.compile b/test/src/hspec-failure.compile
new file mode 100644
index 0000000..e8ed12a
--- /dev/null
+++ b/test/src/hspec-failure.compile
@@ -0,0 +1,743 @@
+Build profile: -w ghc-8.4.4 -O0
+In order, the following will be built (use -v for more details):
+ - hpack-0.31.2 (test:spec) (first run)
+Preprocessing test suite 'spec' for hpack-0.31.2..
+Building test suite 'spec' for hpack-0.31.2..
+Running 1 test suites...
+Test suite spec: RUNNING...
+
+Data.Aeson.Config.FromValue
+  fromValue
+    with a record
+      decodes a record
+      captures unrecognized fields
+      captures nested unrecognized fields
+      ignores fields that start with an underscore
+      fails on missing field
+      fails on invalid field value
+    with (,)
+      captures unrecognized fields
+    with []
+      captures unrecognized fields
+    with Map
+      captures unrecognized fields
+Data.Aeson.Config.Types
+  fromValue
+    List
+      when parsing single values
+        returns the value in a singleton list
+        returns error messages from element parsing
+      when parsing a list of values
+        returns the list
+        propagates parse error messages of invalid elements
+Data.Aeson.Config.Util
+  hyphenize
+    hyphenizes
+    ignores leading underscores
+    when given a type name
+      strips type name
+      ignores trailing underscores in type name
+EndToEnd
+  hpack
+    ignores fields that start with an underscore
+    warns on duplicate fields
+    spec-version
+      accepts spec-version
+      fails on malformed spec-version
+      fails on unsupported spec-version
+      fails on unsupported spec-version from defaults
+    data-files
+      accepts data-files
+    data-dir
+      accepts data-dir
+    github
+      accepts owner/repo
+      accepts owner/repo/path
+    homepage
+      accepts homepage URL
+      with github
+        gives homepage URL precedence
+        omits homepage URL if it is null
+    bug-reports
+      accepts bug-reports URL
+      with github
+        gives bug-reports URL precedence
+        omits bug-reports URL if it is null
+    defaults
+      accepts global defaults
+      accepts library defaults
+      accepts a list of defaults
+      accepts defaults recursively
+      fails on cyclic defaults
+      fails if defaults don't exist
+        # PENDING: No reason given
+      fails on parse error
+      warns on unknown fields
+      accepts defaults from local files
+    version
+      accepts string
+      accepts number
+      rejects other values
+    license
+      accepts cabal-style licenses
+      accepts SPDX licenses
+      with an ambiguous license
+        treats it as a cabal-style license
+      when cabal-version >= 2.2
+        maps license to SPDX license identifier
+        doesn't touch unknown licenses
+      with a LICENSE file
+        infers license
+        when license can not be inferred
+          warns
+        when license is null
+          does not infer license
+    build-type
+      accept Simple
+      accept Configure
+      accept Make
+      accept Custom
+      rejects invalid values
+    extra-doc-files
+      accepts a list of files
+      accepts glob patterns
+      warns if a glob pattern does not match anything
+    build-tools
+      adds known build tools to build-tools
+      adds other build tools to build-tool-depends
+      when the name of a build tool matches an executable from the same package
+        adds it to build-tools
+        gives per-section unqualified names precedence over global qualified 
names
+        gives per-section qualified names precedence over global unqualified 
names
+      when the name of a build tool matches a legacy system build tool
+        adds it to build-tools
+    system-build-tools
+      adds system build tools to build-tools
+      with hpc
+        infers cabal-version 1.14
+      with ghcjs
+        infers cabal-version 1.22
+      with an unknown system build tool
+        infers cabal-version 2.0
+    dependencies
+      accepts single dependency
+      accepts list of dependencies
+      with both global and section specific dependencies
+        combines dependencies
+        gives section specific dependencies precedence
+    pkg-config-dependencies
+      accepts pkg-config-dependencies
+    include-dirs
+      accepts include-dirs
+    install-includes
+      accepts install-includes
+    js-sources
+      accepts js-sources
+      accepts global js-sources
+    cxx-options
+      accepts cxx-options
+      when used inside a nested conditional
+        infers correct cabal-version
+    cxx-sources
+      accepts cxx-sources
+    extra-lib-dirs
+      accepts extra-lib-dirs
+    extra-libraries
+      accepts extra-libraries
+    extra-frameworks-dirs
+      accepts extra-frameworks-dirs
+    frameworks
+      accepts frameworks
+    c-sources
+      keeps declaration order
+      accepts glob patterns
+      warns when a glob pattern does not match any files
+      quotes filenames with special characters
+    custom-setup
+      warns on unknown fields
+      accepts dependencies
+      leaves build-type alone, if it exists
+    library
+      accepts reexported-modules
+      accepts signatures
+      when package.yaml contains duplicate modules
+        generates a cabal file with duplicate modules
+      when inferring modules
+        with exposed-modules
+          infers other-modules
+        with other-modules
+          infers exposed-modules
+        with both exposed-modules and other-modules
+          doesn't infer any modules
+        with neither exposed-modules nor other-modules
+          infers exposed-modules
+        with a conditional
+          doesn't infer any modules mentioned in that conditional
+          with a source-dir inside the conditional
+            infers other-modules
+            does not infer outer modules
+        with generated modules
+          includes generated modules in autogen-modules
+          does not infer any mentioned generated modules
+          does not infer any generated modules mentioned inside conditionals
+      mixins
+        sets cabal-version to 2.0 if mixins are used
+    internal-libraries
+      accepts internal-libraries
+      warns on unknown fields
+      warns on missing source-dirs
+    executables
+      accepts arbitrary entry points as main
+      when inferring modules
+        infers other-modules
+        allows to specify other-modules
+        does not infer any mentioned generated modules
+        with conditional
+          doesn't infer any modules mentioned in that conditional
+          infers other-modules
+      with conditional
+        does not apply global options
+        accepts executable-specific fields
+    when
+      accepts conditionals
+      warns on unknown fields
+      when parsing conditionals with else-branch
+        accepts conditionals with else-branch
+        rejects invalid conditionals
+        rejects invalid conditionals
+        warns on unknown fields
+    verbatim
+      accepts strings
+      accepts multi-line strings as field values
+      allows to null out existing fields
+      when specified globally
+        overrides header fields
+        overrides other fields
+        is not propagated into sections
+      within a section
+        overrides section fields
+    default value of maintainer
+      gives maintainer precedence
+      with author
+        uses author if maintainer is not specified
+        omits maintainer if it is null
+Hpack.CabalFile
+  readCabalFile
+    includes hash
+    accepts cabal-version at the beginning of the file
+  extractVersion
+    extracts Hpack version from a cabal file
+    is agnostic to file name
+    is total
+  parseVersion
+    is inverse to showVersion
+      +++ OK, passed 100 tests.
+  removeGitConflictMarkers
+    remove git conflict markers (git checkout --ours)
+Hpack.Config
+  pathsModuleFromPackageName
+    replaces dashes with underscores in package name
+  fromLibrarySectionInConditional
+    when inferring modules
+      infers other-modules
+      with exposed-modules
+        infers nothing
+      with other-modules
+        infers nothing
+  renamePackage
+    renames a package
+    renames dependencies on self
+  renameDependencies
+    renames dependencies
+    renames dependency in conditionals
+  getModules
+    returns Haskell modules in specified source directory
+    when source directory is '.'
+      ignores Setup
+    when source directory is './.'
+      ignores Setup
+  toBuildTool
+    with an UnqualifiedBuildTool
+      when name does not match a local executable
+        returns a BuildTool
+      when name matches a local executable
+        returns a LocalBuildTool
+      when name matches a legacy executable
+        warns
+      when name matches a legacy system build tool
+        warns
+    with a QualifiedBuildTool
+      when only package matches the current package
+        returns a BuildTool
+      when only executable matches a local executable
+        returns a BuildTool
+      when both package matches the current package and executable matches a 
local executable
+        returns a LocalBuildTool
+  readPackageConfig
+    warns on missing name
+    infers name
+    accepts name
+    accepts version
+    accepts synopsis
+    accepts description
+    accepts category
+    accepts author
+    accepts maintainer
+    accepts copyright
+    accepts stability
+    accepts license
+    infers license file
+    accepts license file
+    accepts list of license files
+    accepts flags
+    accepts extra-source-files
+    accepts arbitrary git URLs as source repository
+    accepts CPP options
+    accepts cc-options
+    accepts ghcjs-options
+    accepts ld-options
+    accepts buildable
+    allows yaml merging and overriding fields
+    when reading library section
+      accepts source-dirs
+      accepts default-extensions
+      accepts global default-extensions
+      accepts global source-dirs
+      allows to specify exposed
+    when reading executable section
+      reads executables section
+      reads executable section
+      with both executable and executables
+        gives executable precedence
+        warns
+      accepts source-dirs
+      accepts global source-dirs
+      accepts default-extensions
+      accepts global default-extensions
+      accepts GHC options
+      accepts global GHC options
+      accepts GHC profiling options
+      accepts global GHC profiling options
+    when reading test section
+      reads test section
+    when a specified source directory does not exist
+      warns
+    when package.yaml can not be parsed
+      returns an error
+    when package.yaml is invalid
+      returns an error
+    when package.yaml does not exist
+      returns an error
+  fromValue
+    with Cond
+      accepts Strings
+      accepts True
+      accepts False
+      rejects other values
+  formatOrList
+    formats a singleton list
+    formats a 2-element list
+    formats an n-element list
+Hpack.Defaults
+  ensure
+    fails when local file does not exist
+  ensureFile
+    downloads file if missing
+      # PENDING: No reason given
+    with existing file
+      does nothing
+    with 404
+      does not create any files
+        # PENDING: No reason given
+Hpack.Haskell
+  isModule
+    accepts module names
+    rejects the empty list
+  isQualifiedIdentifier
+    accepts qualified Haskell identifiers
+    rejects invalid input
+  isIdentifier
+    accepts Haskell identifiers
+    rejects reserved keywords
+    rejects invalid input
+Hpack.License
+  parseLicense
+    parses GPL
+    parses GPL-2
+    parses GPL-3
+    parses LGPL
+    parses LGPL-2.1
+    parses LGPL-3
+    parses AGPL
+    parses AGPL-3
+    parses BSD2
+    parses BSD3
+    parses BSD4
+    parses MIT
+    parses ISC
+    parses MPL-2.0
+    parses Apache
+    parses Apache-2.0
+    parses PublicDomain
+    parses OtherLicense
+    parses AllRightsReserved
+    parses GPL-2.0-or-later
+    parses some-license
+Hpack.Options
+  parseOptions
+    with --help
+      returns Help
+    with --version
+      returns PrintVersion
+    by default
+      returns Run
+      includes target
+      with superfluous arguments
+        returns ParseError
+      with --silent
+        sets optionsVerbose to NoVerbose
+      with --force
+        sets optionsForce to Force
+      with -f
+        sets optionsForce to Force
+      with -
+        sets optionsToStdout to True, implies Force and NoVerbose
+        rejects - for target
+  expandTarget
+    when target is Nothing
+      return default file
+    when target is a file
+      return file
+    when target is a directory
+      appends default file
+    when target file does not exist
+      return target file
+    when target directory does not exist
+      appends default file
+    when target is the empty string
+      return default file
+Hpack.Render.Dsl
+  render
+    when rendering a Stanza
+      renders stanza
+      omits empty fields
+      allows to customize indentation
+      renders nested stanzas
+    when rendering a Field
+      when rendering a MultipleLines value
+        takes nesting into account
+        when value is empty
+          returns an empty list
+      when rendering a SingleLine value
+        returns a single line
+        takes nesting into account
+        takes alignment into account
+        when value is empty
+          returns an empty list
+  renderValue
+    renders WordList
+    renders CommaSeparatedList
+    renders LineSeparatedList
+    when renderSettingsCommaStyle is TrailingCommas
+      renders CommaSeparatedList with trailing commas
+      renders LineSeparatedList without padding
+  sortFieldsBy
+    sorts fields
+    keeps existing field order
+      +++ OK, passed 100 tests.
+    is stable
+      +++ OK, passed 100 tests.
+  addSortKey
+    adds sort key
+Hpack.Render.Hints
+  extractFieldOrder
+    extracts field order hints
+  extractSectionsFieldOrder
+    splits input into sections
+  sanitize
+    removes empty lines
+    removes trailing whitespace
+    removes cabal-version
+  unindent
+    unindents
+  sniffAlignment
+    sniffs field alignment from given cabal file
+    ignores fields without a value on the same line
+  splitField
+    splits fields
+    accepts fields names with dashes
+    rejects fields names with spaces
+    rejects invalid fields
+  sniffIndentation
+    sniff alignment from executable section
+    sniff alignment from library section
+    ignores empty lines
+    ignores whitespace lines
+  sniffCommaStyle
+    detects leading commas
+    detects trailing commas
+    when detection fails
+      returns Nothing
+Hpack.Render
+  renderPackageWith
+    renders a package
+    aligns fields
+    includes description
+    aligns description
+    includes stability
+    includes license-file
+    aligns license-files
+    includes copyright holder
+    aligns copyright holders
+    includes extra-source-files
+    includes buildable
+    when rendering library section
+      renders library section
+    when given list of existing fields
+      retains field order
+      uses default field order for new fields
+      retains section field order
+    when rendering executable section
+      includes dependencies
+      includes GHC options
+      includes frameworks
+      includes extra-framework-dirs
+      includes GHC profiling options
+  renderConditional
+    renders conditionals
+    renders conditionals with else-branch
+    renders nested conditionals
+    conditionalises both build-depends and mixins
+  renderFlag
+    renders flags
+  formatDescription
+    formats description
+    takes specified alignment into account
+    formats empty lines
+  renderSourceRepository
+    renders source-repository without subdir correctly
+    renders source-repository with subdir
+  renderDirectories
+    replaces . with ./. (for compatibility with cabal syntax)
+  renderDependencies
+    renders build-depends
+    renders build-depends with versions
+    renders mixins and build-depends for multiple modules
+Hpack.Syntax.BuildTools
+  fromValue
+    when parsing BuildTools
+      with a scalar
+        accepts qualified names
+        accepts qualified names with a version
+        accepts unqualified names
+        accepts unqualified names with a version
+      with a mapping
+        accepts qualified names
+        accepts unqualified names
+      with a list
+        accepts a list of build tools
+        accepts source dependencies with a qualified name
+        accepts source dependencies with an unqualified name
+    when parsing SystemBuildTools
+      with a scalar
+        accepts system build tools
+        accepts system build tools with a version
+      with a mapping
+        accepts system build tools
+      with a list
+        accepts a list of system build tools
+        accepts objects with name and version
+Hpack.Syntax.Defaults
+  isValidOwner
+    rejects the empty string
+    accepts valid owner names
+    rejects dots
+    rejects multiple consecutive hyphens
+    rejects hyphens at the beginning
+    rejects hyphens at the end
+  isValidRepo
+    rejects the empty string
+    rejects .
+    rejects ..
+    accepts underscores
+    accepts dots
+    accepts hyphens
+  fromValue
+    when parsing Defaults
+      with Object
+        fails when neither github nor local is present
+        accepts Defaults from GitHub
+        rejects invalid owner names
+        rejects invalid repository names
+        rejects invalid Git references
+        rejects \ in path
+        rejects : in path
+        rejects absolute paths
+        rejects .. in path
+      with String
+        accepts Defaults from GitHub
+        rejects invalid owner names
+        rejects invalid repository names
+        rejects invalid Git references
+        rejects missing Git reference
+      with neither Object nor String
+        fails
+Hpack.Syntax.Dependencies
+  fromValue
+    when parsing Dependencies
+      with a scalar
+        accepts dependencies without constraints
+        accepts dependencies with constraints
+        with invalid constraint
+          returns an error message
+      with a list
+        accepts dependencies without constraints
+        accepts dependencies with constraints
+        accepts ^>=
+        accepts objects with name and version
+        accepts git dependencies with version
+        accepts git dependencies
+        accepts github dependencies
+        accepts an optional subdirectory for git dependencies
+        accepts local dependencies
+        when ref is missing
+          produces accurate error messages
+        when both git and github are missing
+          produces accurate error messages
+      with a mapping from dependency names to constraints
+        accepts dependencies without constraints
+        rejects invalid values
+        when the constraint is a Number
+          accepts 1
+          accepts 1.0
+          accepts 0.11
+          accepts 0.110
+          accepts 1e2
+        when the constraint is a String
+          accepts version ranges
+          accepts specific versions
+          accepts wildcard versions
+          accepts ^>=
+          reports parse errors
+        when the constraint is an Object
+          accepts explicit version field
+          accepts github dependencies
+          ignores names in nested hashes
+          defaults to any version
+          with a version key
+            rejects objects
+            accepts a string
+            accepts a specific version as a number
+            accepts a specific version as a string
+          with mixin
+            accepts a single value
+            accepts a list
+Hpack.Syntax.Git
+  isValidRef
+    accepts slashes
+    rejects the empty string
+    accepts .lock as a substring
+    rejects .lock at the end of a component
+    rejects . at the biginning of a component
+    rejects two consecutive dots ..
+    rejects ASCII control characters
+    rejects space
+    rejects ~
+    rejects ^
+    rejects :
+    rejects ?
+    rejects *
+    rejects [
+    rejects \
+    rejects multiple consecutive slashes
+    rejects slash at beginning
+    rejects slash at end
+    rejects . at end
+    rejects @{
+    rejects the single character @
+Hpack.Utf8
+  readFile
+    with a file that uses CRLF newlines
+      applies newline conversion
+  writeFile
+    uses system specific newline encoding
+Hpack.Util
+  sort
+    sorts lexicographically
+  parseMain
+    accepts source file
+    accepts literate source file
+    accepts module
+    accepts hierarchical module
+    accepts qualified identifier
+  toModule
+    maps .hs paths to module names
+    maps .lhs paths to module names
+    maps .hsc paths to module names
+    rejects invalid module names
+  getModuleFilesRecursive
+    gets all files from given directory
+    descends into subdirectories
+    when a subdirectory is not a valid module name
+      does not descend
+  tryReadFile
+    reads file
+    returns Nothing if file does not exist
+  expandGlobs
+    accepts literal files
+    keeps declaration order for literal files
+    removes duplicates
+    rejects directories
+    rejects character ranges
+    when expanding *
+      expands by extension
+      rejects dot-files
+      accepts dot-files when explicitly asked to
+      matches at most one directory component
+    when expanding **
+      matches arbitrary many directory components
+    when a pattern does not match anything
+      warns
+    when a pattern only matches a directory
+      warns
+    when a literal file does not exist
+      warns and keeps the file
+Hpack
+  hpackResult
+    with existing cabal file
+      when cabal file was created manually
+        does not overwrite existing cabal file
+        with --force
+          overwrites existing cabal file
+      when cabal file was created with hpack < 0.20.0
+        overwrites existing cabal file
+      when cabal file was created with hpack >= 0.20.0
+        when hash is missing
+          does not overwrite existing cabal file
+        when hash is present
+          when exsting cabal file was generated with a newer version of hpack
+            does not overwrite existing cabal file FAILED [1]
+          when cabal file was modified manually
+            does not overwrite existing cabal file
+          when only the hpack version in the cabal file header changed
+            does not overwrite existing cabal file
+            does not complain if it's newer
+
+Failures:
+
+  test/HpackSpec.hs:80:15: 
+  1) Hpack.hpackResult, with existing cabal file, when cabal file was created 
with hpack >= 0.20.0, when hash is present, when exsting cabal file was 
generated with a newer version of hpack, does not overwrite existing cabal file
+       not expected: "cabal-version: 1.12\n\n-- This file has been generated 
from package.yaml by hpack version 0.22.0.\n--\n-- see: 
https://github.com/sol/hpack\n--\n-- hash: 
224b158530d1d066069f18794673f6a7a41f689d26f27fe8cd505cef259f35a9\n\nname:       
    foo\nversion:        0.1.0\nbuild-type:     Simple\n"
+
+  To rerun use: --match "/Hpack/hpackResult/with existing cabal file/when 
cabal file was created with hpack >= 0.20.0/when hash is present/when exsting 
cabal file was generated with a newer version of hpack/does not overwrite 
existing cabal file/"
+
+Randomized with seed 625441262
+
+Finished in 0.2159 seconds
+469 examples, 1 failure, 3 pending
+Test suite spec: FAIL
+Test suite logged to:
+/home/tseenshe/hpack/dist-newstyle/build/x86_64-linux/ghc-8.4.4/hpack-0.31.2/t/spec/noopt/test/hpack-0.31.2-spec.log
+0 of 1 test suites (0 of 1 test cases) passed.
+cabal: Tests failed for test:spec from hpack-0.31.2.
+
diff --git a/test/src/tasty-failure.compile b/test/src/tasty-failure.compile
new file mode 100644
index 0000000..422b3b6
--- /dev/null
+++ b/test/src/tasty-failure.compile
@@ -0,0 +1,2756 @@
+Build profile: -w ghc-8.4.4 -O0
+In order, the following will be built (use -v for more details):
+ - course-0.1.4 (test:tasty) (first run)
+Preprocessing test suite 'tasty' for course-0.1.4..
+Building test suite 'tasty' for course-0.1.4..
+Running 1 test suites...
+Test suite tasty: RUNNING...
+Tests
+  Optional
+    mapOptional
+      Empty:                                                                   
        FAIL
+        Exception: todo: Course.Optional#mapOptional
+        CallStack (from HasCallStack):
+          error, called at src/Course/Optional.hs:31:3 in 
course-0.1.4-inplace:Course.Optional
+      Full:                                                                 
           FAIL
+        Exception: todo: Course.Optional#mapOptional
+        CallStack (from HasCallStack):
+          error, called at src/Course/Optional.hs:31:3 in 
course-0.1.4-inplace:Course.Optional
+    bindOptional
+      Empty:                                                                   
        FAIL
+        Exception: todo: Course.Optional#bindOptional
+        CallStack (from HasCallStack):
+          error, called at src/Course/Optional.hs:48:3 in 
course-0.1.4-inplace:Course.Optional
+      even dec, odd inc, even input:                                        
           FAIL
+        Exception: todo: Course.Optional#bindOptional
+        CallStack (from HasCallStack):
+          error, called at src/Course/Optional.hs:48:3 in 
course-0.1.4-inplace:Course.Optional
+      even dec, odd inc, odd input:                                         
           FAIL
+        Exception: todo: Course.Optional#bindOptional
+        CallStack (from HasCallStack):
+          error, called at src/Course/Optional.hs:48:3 in 
course-0.1.4-inplace:Course.Optional
+    ??
+      Full:                                                                    
        FAIL
+        Exception: todo: Course.Optional#(??)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Optional.hs:62:3 in 
course-0.1.4-inplace:Course.Optional
+      Empty:                                                                
           FAIL
+        Exception: todo: Course.Optional#(??)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Optional.hs:62:3 in 
course-0.1.4-inplace:Course.Optional
+    <+>
+      first Full:                                                              
        FAIL
+        Exception: todo: Course.Optional#(<+>)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Optional.hs:83:3 in 
course-0.1.4-inplace:Course.Optional
+      both Full:                                                            
           FAIL
+        Exception: todo: Course.Optional#(<+>)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Optional.hs:83:3 in 
course-0.1.4-inplace:Course.Optional
+      first Empty:                                                          
           FAIL
+        Exception: todo: Course.Optional#(<+>)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Optional.hs:83:3 in 
course-0.1.4-inplace:Course.Optional
+      both empty:                                                           
           FAIL
+        Exception: todo: Course.Optional#(<+>)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Optional.hs:83:3 in 
course-0.1.4-inplace:Course.Optional
+    optional
+      replaces full data constructor:                                          
        FAIL
+        Exception: todo: Course.Optional#optional
+        CallStack (from HasCallStack):
+          error, called at src/Course/Optional.hs:98:3 in 
course-0.1.4-inplace:Course.Optional
+      replaces empty data constructor:                                      
           FAIL
+        Exception: todo: Course.Optional#optional
+        CallStack (from HasCallStack):
+          error, called at src/Course/Optional.hs:98:3 in 
course-0.1.4-inplace:Course.Optional
+  List
+    headOr
+      headOr on non-empty list:                                                
        FAIL
+        Exception: todo: Course.List#headOr
+        CallStack (from HasCallStack):
+          error, called at src/Course/List.hs:79:3 in 
course-0.1.4-inplace:Course.List
+      headOr on empty list:                                                 
           FAIL
+        Exception: todo: Course.List#headOr
+        CallStack (from HasCallStack):
+          error, called at src/Course/List.hs:79:3 in 
course-0.1.4-inplace:Course.List
+      headOr on infinity always 0:                                          
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.List#headOr
+          CallStack (from HasCallStack):
+            error, called at src/Course/List.hs:79:3 in 
course-0.1.4-inplace:Course.List
+        0
+        Use --quickcheck-replay=218885 to reproduce.
+      headOr on empty list always the default:                              
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.List#headOr
+          CallStack (from HasCallStack):
+            error, called at src/Course/List.hs:79:3 in 
course-0.1.4-inplace:Course.List
+        0
+        Use --quickcheck-replay=779618 to reproduce.
+    productTest
+      product of empty list:                                                   
        FAIL
+        Exception: todo: Course.List#product
+        CallStack (from HasCallStack):
+          error, called at src/Course/List.hs:95:3 in 
course-0.1.4-inplace:Course.List
+      product of 1..3:                                                      
           FAIL
+        Exception: todo: Course.List#product
+        CallStack (from HasCallStack):
+          error, called at src/Course/List.hs:95:3 in 
course-0.1.4-inplace:Course.List
+      product of 1..4:                                                      
           FAIL
+        Exception: todo: Course.List#product
+        CallStack (from HasCallStack):
+          error, called at src/Course/List.hs:95:3 in 
course-0.1.4-inplace:Course.List
+    sum
+      sum 1..3:                                                                
        FAIL
+        Exception: todo: Course.List#sum
+        CallStack (from HasCallStack):
+          error, called at src/Course/List.hs:110:3 in 
course-0.1.4-inplace:Course.List
+      sum 1..4:                                                             
           FAIL
+        Exception: todo: Course.List#sum
+        CallStack (from HasCallStack):
+          error, called at src/Course/List.hs:110:3 in 
course-0.1.4-inplace:Course.List
+      subtracting each element in a list from its sum is always 0:          
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.List#sum
+          CallStack (from HasCallStack):
+            error, called at src/Course/List.hs:110:3 in 
course-0.1.4-inplace:Course.List
+        []
+        Use --quickcheck-replay=345519 to reproduce.
+    length
+      length 1..3:                                                             
        FAIL
+        Exception: todo: Course.List#length
+        CallStack (from HasCallStack):
+          error, called at src/Course/List.hs:122:3 in 
course-0.1.4-inplace:Course.List
+      summing a list of 1s is equal to its length:                          
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.List#length
+          CallStack (from HasCallStack):
+            error, called at src/Course/List.hs:122:3 in 
course-0.1.4-inplace:Course.List
+        []
+        Use --quickcheck-replay=679566 to reproduce.
+    map
+      add 10 on list:                                                          
        FAIL
+        Exception: todo: Course.List#map
+        CallStack (from HasCallStack):
+          error, called at src/Course/List.hs:137:3 in 
course-0.1.4-inplace:Course.List
+      headOr after map:                                                     
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.List#headOr
+          CallStack (from HasCallStack):
+            error, called at src/Course/List.hs:79:3 in 
course-0.1.4-inplace:Course.List
+        0
+        Use --quickcheck-replay=920194 to reproduce.
+      map id is id:                                                         
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.List#map
+          CallStack (from HasCallStack):
+            error, called at src/Course/List.hs:137:3 in 
course-0.1.4-inplace:Course.List
+        []
+        Use --quickcheck-replay=666065 to reproduce.
+    filter
+      filter even:                                                             
        FAIL
+        Exception: todo: Course.List#filter
+        CallStack (from HasCallStack):
+          error, called at src/Course/List.hs:154:3 in 
course-0.1.4-inplace:Course.List
+      filter (const True) is identity (headOr):                             
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.List#headOr
+          CallStack (from HasCallStack):
+            error, called at src/Course/List.hs:79:3 in 
course-0.1.4-inplace:Course.List
+        0
+        Use --quickcheck-replay=149662 to reproduce.
+      filter (const True) is identity:                                      
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.List#filter
+          CallStack (from HasCallStack):
+            error, called at src/Course/List.hs:154:3 in 
course-0.1.4-inplace:Course.List
+        []
+        Use --quickcheck-replay=914136 to reproduce.
+      filter (const False) is the empty list:                               
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.List#filter
+          CallStack (from HasCallStack):
+            error, called at src/Course/List.hs:154:3 in 
course-0.1.4-inplace:Course.List
+        []
+        Use --quickcheck-replay=323113 to reproduce.
+    (++)
+      (1..6):                                                                  
        FAIL
+        Exception: todo: Course.List#(++)
+        CallStack (from HasCallStack):
+          error, called at src/Course/List.hs:173:3 in 
course-0.1.4-inplace:Course.List
+      append empty to infinite:                                             
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.List#headOr
+          CallStack (from HasCallStack):
+            error, called at src/Course/List.hs:79:3 in 
course-0.1.4-inplace:Course.List
+        0
+        Use --quickcheck-replay=525683 to reproduce.
+      append anything to infinity:                                          
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.List#headOr
+          CallStack (from HasCallStack):
+            error, called at src/Course/List.hs:79:3 in 
course-0.1.4-inplace:Course.List
+        (0,[])
+        Use --quickcheck-replay=970556 to reproduce.
+      associativity:                                                        
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.List#(++)
+          CallStack (from HasCallStack):
+            error, called at src/Course/List.hs:173:3 in 
course-0.1.4-inplace:Course.List
+        ([],[],[])
+        Use --quickcheck-replay=942050 to reproduce.
+      append to empty list:                                                 
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.List#(++)
+          CallStack (from HasCallStack):
+            error, called at src/Course/List.hs:173:3 in 
course-0.1.4-inplace:Course.List
+        []
+        Use --quickcheck-replay=430345 to reproduce.
+    flatten
+      (1..9):                                                                  
        FAIL
+        Exception: todo: Course.List#flatten
+        CallStack (from HasCallStack):
+          error, called at src/Course/List.hs:191:3 in 
course-0.1.4-inplace:Course.List
+      flatten (infinity :. y):                                              
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.List#headOr
+          CallStack (from HasCallStack):
+            error, called at src/Course/List.hs:79:3 in 
course-0.1.4-inplace:Course.List
+        (0,[])
+        Use --quickcheck-replay=266051 to reproduce.
+      flatten (y :. infinity):                                              
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.List#headOr
+          CallStack (from HasCallStack):
+            error, called at src/Course/List.hs:79:3 in 
course-0.1.4-inplace:Course.List
+        (0,[])
+        Use --quickcheck-replay=691387 to reproduce.
+      sum of lengths == length of flattened:                                
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.List#sum
+          CallStack (from HasCallStack):
+            error, called at src/Course/List.hs:110:3 in 
course-0.1.4-inplace:Course.List
+        []
+        Use --quickcheck-replay=292173 to reproduce.
+    flatMap
+      lists of Integer:                                                        
        FAIL
+        Exception: todo: Course.List#flatMap
+        CallStack (from HasCallStack):
+          error, called at src/Course/List.hs:208:3 in 
course-0.1.4-inplace:Course.List
+      flatMap id flattens a list of lists:                                  
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.List#headOr
+          CallStack (from HasCallStack):
+            error, called at src/Course/List.hs:79:3 in 
course-0.1.4-inplace:Course.List
+        (0,[])
+        Use --quickcheck-replay=199462 to reproduce.
+      flatMap id on a list of lists take 2:                                 
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.List#headOr
+          CallStack (from HasCallStack):
+            error, called at src/Course/List.hs:79:3 in 
course-0.1.4-inplace:Course.List
+        (0,[])
+        Use --quickcheck-replay=213627 to reproduce.
+      flatMap id == flatten:                                                
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.List#flatMap
+          CallStack (from HasCallStack):
+            error, called at src/Course/List.hs:208:3 in 
course-0.1.4-inplace:Course.List
+        []
+        Use --quickcheck-replay=413820 to reproduce.
+    flattenAgain
+      lists of Integer:                                                        
        FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.List#flatten
+          CallStack (from HasCallStack):
+            error, called at src/Course/List.hs:191:3 in 
course-0.1.4-inplace:Course.List
+        []
+        Use --quickcheck-replay=279553 to reproduce.
+    seqOptional
+      all Full:                                                                
        FAIL
+        Exception: todo: Course.List#seqOptional
+        CallStack (from HasCallStack):
+          error, called at src/Course/List.hs:246:3 in 
course-0.1.4-inplace:Course.List
+      empty list:                                                           
           FAIL
+        Exception: todo: Course.List#seqOptional
+        CallStack (from HasCallStack):
+          error, called at src/Course/List.hs:246:3 in 
course-0.1.4-inplace:Course.List
+      contains Empty:                                                       
           FAIL
+        Exception: todo: Course.List#seqOptional
+        CallStack (from HasCallStack):
+          error, called at src/Course/List.hs:246:3 in 
course-0.1.4-inplace:Course.List
+      Empty at head of infinity:                                            
           FAIL
+        Exception: todo: Course.List#seqOptional
+        CallStack (from HasCallStack):
+          error, called at src/Course/List.hs:246:3 in 
course-0.1.4-inplace:Course.List
+    find
+      find no matches:                                                         
        FAIL
+        Exception: todo: Course.List#find
+        CallStack (from HasCallStack):
+          error, called at src/Course/List.hs:269:3 in 
course-0.1.4-inplace:Course.List
+      empty list:                                                           
           FAIL
+        Exception: todo: Course.List#find
+        CallStack (from HasCallStack):
+          error, called at src/Course/List.hs:269:3 in 
course-0.1.4-inplace:Course.List
+      find only even:                                                       
           FAIL
+        Exception: todo: Course.List#find
+        CallStack (from HasCallStack):
+          error, called at src/Course/List.hs:269:3 in 
course-0.1.4-inplace:Course.List
+      find first, not second even:                                          
           FAIL
+        Exception: todo: Course.List#find
+        CallStack (from HasCallStack):
+          error, called at src/Course/List.hs:269:3 in 
course-0.1.4-inplace:Course.List
+      find on infinite list:                                                
           FAIL
+        Exception: todo: Course.List#find
+        CallStack (from HasCallStack):
+          error, called at src/Course/List.hs:269:3 in 
course-0.1.4-inplace:Course.List
+    lengthGT4
+      list of length 3:                                                        
        FAIL
+        Exception: todo: Course.List#lengthGT4
+        CallStack (from HasCallStack):
+          error, called at src/Course/List.hs:288:3 in 
course-0.1.4-inplace:Course.List
+      list of length 4:                                                     
           FAIL
+        Exception: todo: Course.List#lengthGT4
+        CallStack (from HasCallStack):
+          error, called at src/Course/List.hs:288:3 in 
course-0.1.4-inplace:Course.List
+      empty list:                                                           
           FAIL
+        Exception: todo: Course.List#lengthGT4
+        CallStack (from HasCallStack):
+          error, called at src/Course/List.hs:288:3 in 
course-0.1.4-inplace:Course.List
+      list of length 5:                                                     
           FAIL
+        Exception: todo: Course.List#lengthGT4
+        CallStack (from HasCallStack):
+          error, called at src/Course/List.hs:288:3 in 
course-0.1.4-inplace:Course.List
+      infinite list:                                                        
           FAIL
+        Exception: todo: Course.List#lengthGT4
+        CallStack (from HasCallStack):
+          error, called at src/Course/List.hs:288:3 in 
course-0.1.4-inplace:Course.List
+    reverse
+      empty list:                                                              
        FAIL
+        Exception: todo: Course.List#reverse
+        CallStack (from HasCallStack):
+          error, called at src/Course/List.hs:305:3 in 
course-0.1.4-inplace:Course.List
+      reverse . reverse on largeList:                                       
           FAIL
+        Exception: todo: Course.List#reverse
+        CallStack (from HasCallStack):
+          error, called at src/Course/List.hs:305:3 in 
course-0.1.4-inplace:Course.List
+      reverse then append is same as append then reverse:                   
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.List#(++)
+          CallStack (from HasCallStack):
+            error, called at src/Course/List.hs:173:3 in 
course-0.1.4-inplace:Course.List
+        ([],[])
+        Use --quickcheck-replay=534070 to reproduce.
+      reverse single element list is the list:                              
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.List#reverse
+          CallStack (from HasCallStack):
+            error, called at src/Course/List.hs:305:3 in 
course-0.1.4-inplace:Course.List
+        0
+        Use --quickcheck-replay=23999 to reproduce.
+    produce
+      increment:                                                               
        OK
+      double:                                                               
           OK
+  Functor
+    ExactlyOne:                                                                
        FAIL
+      Exception: todo: Course.Functor (<$>)#instance ExactlyOne
+      CallStack (from HasCallStack):
+        error, called at src/Course/Functor.hs:45:5 in 
course-0.1.4-inplace:Course.Functor
+    List
+      empty list:                                                              
        FAIL
+        Exception: todo: Course.Functor (<$>)#instance List
+        CallStack (from HasCallStack):
+          error, called at src/Course/Functor.hs:60:5 in 
course-0.1.4-inplace:Course.Functor
+      increment:                                                            
           FAIL
+        Exception: todo: Course.Functor (<$>)#instance List
+        CallStack (from HasCallStack):
+          error, called at src/Course/Functor.hs:60:5 in 
course-0.1.4-inplace:Course.Functor
+    Optional
+      Empty:                                                                   
        FAIL
+        Exception: todo: Course.Functor (<$>)#instance Optional
+        CallStack (from HasCallStack):
+          error, called at src/Course/Functor.hs:75:5 in 
course-0.1.4-inplace:Course.Functor
+      Full:                                                                 
           FAIL
+        Exception: todo: Course.Functor (<$>)#instance Optional
+        CallStack (from HasCallStack):
+          error, called at src/Course/Functor.hs:75:5 in 
course-0.1.4-inplace:Course.Functor
+    (->):                                                                   
           FAIL
+      Exception: todo: Course.Functor (<$>)#((->) t)
+      CallStack (from HasCallStack):
+        error, called at src/Course/Functor.hs:87:5 in 
course-0.1.4-inplace:Course.Functor
+    (<$)
+      Map 7:                                                                   
        FAIL
+        Exception: todo: Course.Functor#(<$)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Functor.hs:103:3 in 
course-0.1.4-inplace:Course.Functor
+      Always maps a constant value over List:                               
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.Functor#(<$)
+          CallStack (from HasCallStack):
+            error, called at src/Course/Functor.hs:103:3 in 
course-0.1.4-inplace:Course.Functor
+        0
+        0
+        0
+        0
+        Use --quickcheck-replay=204341 to reproduce.
+      Always maps a constant value over Full (Optional):                    
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.Functor#(<$)
+          CallStack (from HasCallStack):
+            error, called at src/Course/Functor.hs:103:3 in 
course-0.1.4-inplace:Course.Functor
+        0
+        0
+        Use --quickcheck-replay=847361 to reproduce.
+    void
+      List:                                                                    
        FAIL
+        Exception: todo: Course.Functor#void
+        CallStack (from HasCallStack):
+          error, called at src/Course/Functor.hs:123:3 in 
course-0.1.4-inplace:Course.Functor
+      Full:                                                                 
           FAIL
+        Exception: todo: Course.Functor#void
+        CallStack (from HasCallStack):
+          error, called at src/Course/Functor.hs:123:3 in 
course-0.1.4-inplace:Course.Functor
+      Empty:                                                                
           FAIL
+        Exception: todo: Course.Functor#void
+        CallStack (from HasCallStack):
+          error, called at src/Course/Functor.hs:123:3 in 
course-0.1.4-inplace:Course.Functor
+      (->):                                                                 
           FAIL
+        Exception: todo: Course.Functor#void
+        CallStack (from HasCallStack):
+          error, called at src/Course/Functor.hs:123:3 in 
course-0.1.4-inplace:Course.Functor
+  Applicative
+    ExactlyOne instance
+      pure == ExactlyOne:                                                      
        FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.Applicative pure#instance ExactlyOne
+          CallStack (from HasCallStack):
+            error, called at src/Course/Applicative.hs:51:5 in 
course-0.1.4-inplace:Course.Applicative
+        0
+        Use --quickcheck-replay=746459 to reproduce.
+      Applying within ExactlyOne:                                           
           FAIL
+        Exception: todo: Course.Applicative (<*>)#instance 
ExactlyOne
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:57:5 in 
course-0.1.4-inplace:Course.Applicative
+    List instance
+      pure:                                                                    
        FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.Applicative pure#instance List
+          CallStack (from HasCallStack):
+            error, called at src/Course/Applicative.hs:70:5 in 
course-0.1.4-inplace:Course.Applicative
+        0
+        Use --quickcheck-replay=375608 to reproduce.
+      <*>:                                                                  
           FAIL
+        Exception: todo: Course.Apply (<*>)#instance List
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:76:5 in 
course-0.1.4-inplace:Course.Applicative
+    lift1
+      ExactlyOne:                                                              
        FAIL
+        Exception: todo: Course.Applicative#lift1
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:255:3 in 
course-0.1.4-inplace:Course.Applicative
+      empty List:                                                           
           FAIL
+        Exception: todo: Course.Applicative#lift1
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:255:3 in 
course-0.1.4-inplace:Course.Applicative
+      List:                                                                 
           FAIL
+        Exception: todo: Course.Applicative#lift1
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:255:3 in 
course-0.1.4-inplace:Course.Applicative
+    Optional instance
+      pure:                                                                    
        FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.Applicative pure#instance Optional
+          CallStack (from HasCallStack):
+            error, called at src/Course/Applicative.hs:95:5 in 
course-0.1.4-inplace:Course.Applicative
+        0
+        Use --quickcheck-replay=592324 to reproduce.
+      Full <*> Full:                                                        
           FAIL
+        Exception: todo: Course.Apply (<*>)#instance Optional
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:101:5 in 
course-0.1.4-inplace:Course.Applicative
+      Empty <*> Full:                                                       
           FAIL
+        Exception: todo: Course.Apply (<*>)#instance Optional
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:101:5 in 
course-0.1.4-inplace:Course.Applicative
+      Full <*> Empty:                                                       
           FAIL
+        Exception: todo: Course.Apply (<*>)#instance Optional
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:101:5 in 
course-0.1.4-inplace:Course.Applicative
+    Function instance
+      addition:                                                                
        FAIL
+        Exception: todo: Course.Apply (<*>)#instance ((->) t)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:132:5 in 
course-0.1.4-inplace:Course.Applicative
+      more addition:                                                        
           FAIL
+        Exception: todo: Course.Apply (<*>)#instance ((->) t)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:132:5 in 
course-0.1.4-inplace:Course.Applicative
+      even more addition:                                                   
           FAIL
+        Exception: todo: Course.Apply (<*>)#instance ((->) t)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:132:5 in 
course-0.1.4-inplace:Course.Applicative
+      addition and multiplication:                                          
           FAIL
+        Exception: todo: Course.Apply (<*>)#instance ((->) t)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:132:5 in 
course-0.1.4-inplace:Course.Applicative
+      more addition and multiplcation:                                      
           FAIL
+        Exception: todo: Course.Apply (<*>)#instance ((->) t)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:132:5 in 
course-0.1.4-inplace:Course.Applicative
+      pure:                                                                 
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.Applicative pure#((->) t)
+          CallStack (from HasCallStack):
+            error, called at src/Course/Applicative.hs:126:5 in 
course-0.1.4-inplace:Course.Applicative
+        0
+        0
+        Use --quickcheck-replay=134543 to reproduce.
+    lift2
+      + over ExactlyOne:                                                       
        FAIL
+        Exception: todo: Course.Applicative#lift2
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:161:3 in 
course-0.1.4-inplace:Course.Applicative
+      + over List:                                                          
           FAIL
+        Exception: todo: Course.Applicative#lift2
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:161:3 in 
course-0.1.4-inplace:Course.Applicative
+      + over Optional - all full:                                           
           FAIL
+        Exception: todo: Course.Applicative#lift2
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:161:3 in 
course-0.1.4-inplace:Course.Applicative
+      + over Optional - first Empty:                                        
           FAIL
+        Exception: todo: Course.Applicative#lift2
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:161:3 in 
course-0.1.4-inplace:Course.Applicative
+      + over Optional - second Empty:                                       
           FAIL
+        Exception: todo: Course.Applicative#lift2
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:161:3 in 
course-0.1.4-inplace:Course.Applicative
+      + over functions:                                                     
           FAIL
+        Exception: todo: Course.Applicative#lift2
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:161:3 in 
course-0.1.4-inplace:Course.Applicative
+    lift3
+      + over ExactlyOne:                                                       
        FAIL
+        Exception: todo: Course.Applicative#lift3
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:194:3 in 
course-0.1.4-inplace:Course.Applicative
+      + over List:                                                          
           FAIL
+        Exception: todo: Course.Applicative#lift3
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:194:3 in 
course-0.1.4-inplace:Course.Applicative
+      + over Optional:                                                      
           FAIL
+        Exception: todo: Course.Applicative#lift3
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:194:3 in 
course-0.1.4-inplace:Course.Applicative
+      + over Optional - third Empty:                                        
           FAIL
+        Exception: todo: Course.Applicative#lift3
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:194:3 in 
course-0.1.4-inplace:Course.Applicative
+      + over Optional - first Empty:                                        
           FAIL
+        Exception: todo: Course.Applicative#lift3
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:194:3 in 
course-0.1.4-inplace:Course.Applicative
+      + over Optional - first and second Empty:                             
           FAIL
+        Exception: todo: Course.Applicative#lift3
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:194:3 in 
course-0.1.4-inplace:Course.Applicative
+      + over functions:                                                     
           FAIL
+        Exception: todo: Course.Applicative#lift3
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:194:3 in 
course-0.1.4-inplace:Course.Applicative
+    lift4
+      + over ExactlyOne:                                                       
        FAIL
+        Exception: todo: Course.Applicative#lift4
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:228:3 in 
course-0.1.4-inplace:Course.Applicative
+      + over List:                                                          
           FAIL
+        Exception: todo: Course.Applicative#lift4
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:228:3 in 
course-0.1.4-inplace:Course.Applicative
+      + over Optional:                                                      
           FAIL
+        Exception: todo: Course.Applicative#lift4
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:228:3 in 
course-0.1.4-inplace:Course.Applicative
+      + over Optional - third Empty:                                        
           FAIL
+        Exception: todo: Course.Applicative#lift4
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:228:3 in 
course-0.1.4-inplace:Course.Applicative
+      + over Optional - first Empty:                                        
           FAIL
+        Exception: todo: Course.Applicative#lift4
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:228:3 in 
course-0.1.4-inplace:Course.Applicative
+      + over Optional - first and second Empty:                             
           FAIL
+        Exception: todo: Course.Applicative#lift4
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:228:3 in 
course-0.1.4-inplace:Course.Applicative
+      + over functions:                                                     
           FAIL
+        Exception: todo: Course.Applicative#lift4
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:228:3 in 
course-0.1.4-inplace:Course.Applicative
+    lift1
+      + over ExactlyOne:                                                       
        FAIL
+        Exception: todo: Course.Applicative#lift1
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:255:3 in 
course-0.1.4-inplace:Course.Applicative
+      + over empty List:                                                    
           FAIL
+        Exception: todo: Course.Applicative#lift1
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:255:3 in 
course-0.1.4-inplace:Course.Applicative
+      + over List:                                                          
           FAIL
+        Exception: todo: Course.Applicative#lift1
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:255:3 in 
course-0.1.4-inplace:Course.Applicative
+    rightApply
+      *> over List:                                                            
        FAIL
+        Exception: todo: Course.Applicative#(*>)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:281:3 in 
course-0.1.4-inplace:Course.Applicative
+      *> over List:                                                         
           FAIL
+        Exception: todo: Course.Applicative#(*>)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:281:3 in 
course-0.1.4-inplace:Course.Applicative
+      another *> over List:                                                 
           FAIL
+        Exception: todo: Course.Applicative#(*>)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:281:3 in 
course-0.1.4-inplace:Course.Applicative
+      *> over Optional:                                                     
           FAIL
+        Exception: todo: Course.Applicative#(*>)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:281:3 in 
course-0.1.4-inplace:Course.Applicative
+      *> over List property:                                                
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.Applicative#(*>)
+          CallStack (from HasCallStack):
+            error, called at src/Course/Applicative.hs:281:3 in 
course-0.1.4-inplace:Course.Applicative
+        0
+        0
+        0
+        0
+        0
+        0
+        Use --quickcheck-replay=449856 to reproduce.
+      *> over Optional property:                                            
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.Applicative#(*>)
+          CallStack (from HasCallStack):
+            error, called at src/Course/Applicative.hs:281:3 in 
course-0.1.4-inplace:Course.Applicative
+        0
+        0
+        Use --quickcheck-replay=358238 to reproduce.
+    leftApply
+      <* over List:                                                            
        FAIL
+        Exception: todo: Course.Applicative#(<*)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:307:3 in 
course-0.1.4-inplace:Course.Applicative
+      another <* over List:                                                 
           FAIL
+        Exception: todo: Course.Applicative#(<*)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:307:3 in 
course-0.1.4-inplace:Course.Applicative
+      Yet another <* over List:                                             
           FAIL
+        Exception: todo: Course.Applicative#(<*)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:307:3 in 
course-0.1.4-inplace:Course.Applicative
+      <* over Optional:                                                     
           FAIL
+        Exception: todo: Course.Applicative#(<*)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:307:3 in 
course-0.1.4-inplace:Course.Applicative
+      <* over List property:                                                
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.Applicative#(<*)
+          CallStack (from HasCallStack):
+            error, called at src/Course/Applicative.hs:307:3 in 
course-0.1.4-inplace:Course.Applicative
+        0
+        0
+        0
+        0
+        0
+        0
+        Use --quickcheck-replay=621753 to reproduce.
+      <* over Optional property:                                            
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.Applicative#(<*)
+          CallStack (from HasCallStack):
+            error, called at src/Course/Applicative.hs:307:3 in 
course-0.1.4-inplace:Course.Applicative
+        0
+        0
+        Use --quickcheck-replay=455616 to reproduce.
+    sequence
+      ExactlyOne:                                                              
        FAIL
+        Exception: todo: Course.Applicative#sequence
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:330:3 in 
course-0.1.4-inplace:Course.Applicative
+      List:                                                                 
           FAIL
+        Exception: todo: Course.Applicative#sequence
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:330:3 in 
course-0.1.4-inplace:Course.Applicative
+      Optional with an empty:                                               
           FAIL
+        Exception: todo: Course.Applicative#sequence
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:330:3 in 
course-0.1.4-inplace:Course.Applicative
+      Optional:                                                             
           FAIL
+        Exception: todo: Course.Applicative#sequence
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:330:3 in 
course-0.1.4-inplace:Course.Applicative
+      (->):                                                                 
           FAIL
+        Exception: todo: Course.Applicative#sequence
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:330:3 in 
course-0.1.4-inplace:Course.Applicative
+    replicateA
+      ExactlyOne:                                                              
        FAIL
+        Exception: todo: Course.Applicative#replicateA
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:356:3 in 
course-0.1.4-inplace:Course.Applicative
+      Optional - Full:                                                      
           FAIL
+        Exception: todo: Course.Applicative#replicateA
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:356:3 in 
course-0.1.4-inplace:Course.Applicative
+      Optional - Empty:                                                     
           FAIL
+        Exception: todo: Course.Applicative#replicateA
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:356:3 in 
course-0.1.4-inplace:Course.Applicative
+      (->):                                                                 
           FAIL
+        Exception: todo: Course.Applicative#replicateA
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:356:3 in 
course-0.1.4-inplace:Course.Applicative
+      List:                                                                 
           FAIL
+        Exception: todo: Course.Applicative#replicateA
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:356:3 in 
course-0.1.4-inplace:Course.Applicative
+    filtering
+      ExactlyOne:                                                              
        FAIL
+        Exception: todo: Course.Applicative#filtering
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:384:3 in 
course-0.1.4-inplace:Course.Applicative
+      Optional - all true:                                                  
           FAIL
+        Exception: todo: Course.Applicative#filtering
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:384:3 in 
course-0.1.4-inplace:Course.Applicative
+      Optional - some false:                                                
           FAIL
+        Exception: todo: Course.Applicative#filtering
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:384:3 in 
course-0.1.4-inplace:Course.Applicative
+      Optional - some empty:                                                
           FAIL
+        Exception: todo: Course.Applicative#filtering
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:384:3 in 
course-0.1.4-inplace:Course.Applicative
+      (->):                                                                 
           FAIL
+        Exception: todo: Course.Applicative#filtering
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:384:3 in 
course-0.1.4-inplace:Course.Applicative
+      List:                                                                 
           FAIL
+        Exception: todo: Course.Applicative#filtering
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:384:3 in 
course-0.1.4-inplace:Course.Applicative
+  Monad
+    (=<<) for ExactlyOne:                                                      
        FAIL
+      Exception: todo: Course.Monad (=<<)#instance ExactlyOne
+      CallStack (from HasCallStack):
+        error, called at src/Course/Monad.hs:40:5 in 
course-0.1.4-inplace:Course.Monad
+    (=<<) for List:                                                         
           FAIL
+      Exception: todo: Course.Monad (=<<)#instance List
+      CallStack (from HasCallStack):
+        error, called at src/Course/Monad.hs:52:5 in 
course-0.1.4-inplace:Course.Monad
+    (=<<) for Optional:                                                     
           FAIL
+      Exception: todo: Course.Monad (=<<)#instance Optional
+      CallStack (from HasCallStack):
+        error, called at src/Course/Monad.hs:64:5 in 
course-0.1.4-inplace:Course.Monad
+    (=<<) for (->):                                                         
           FAIL
+      Exception: todo: Course.Monad (=<<)#instance ((->) t)
+      CallStack (from HasCallStack):
+        error, called at src/Course/Monad.hs:76:5 in 
course-0.1.4-inplace:Course.Monad
+    <**>
+      ExactlyOne:                                                              
        FAIL
+        Exception: todo: Course.Monad#(<**>)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Monad.hs:115:3 in 
course-0.1.4-inplace:Course.Monad
+      List:                                                                 
           FAIL
+        Exception: todo: Course.Monad#(<**>)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Monad.hs:115:3 in 
course-0.1.4-inplace:Course.Monad
+      Optional:                                                             
           FAIL
+        Exception: todo: Course.Monad#(<**>)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Monad.hs:115:3 in 
course-0.1.4-inplace:Course.Monad
+      Optional - empty function:                                            
           FAIL
+        Exception: todo: Course.Monad#(<**>)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Monad.hs:115:3 in 
course-0.1.4-inplace:Course.Monad
+      Optional - empty value:                                               
           FAIL
+        Exception: todo: Course.Monad#(<**>)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Monad.hs:115:3 in 
course-0.1.4-inplace:Course.Monad
+      (->) 1:                                                               
           FAIL
+        Exception: todo: Course.Monad#(<**>)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Monad.hs:115:3 in 
course-0.1.4-inplace:Course.Monad
+      (->) 2:                                                               
           FAIL
+        Exception: todo: Course.Monad#(<**>)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Monad.hs:115:3 in 
course-0.1.4-inplace:Course.Monad
+      (->) 3:                                                               
           FAIL
+        Exception: todo: Course.Monad#(<**>)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Monad.hs:115:3 in 
course-0.1.4-inplace:Course.Monad
+      (->) 4:                                                               
           FAIL
+        Exception: todo: Course.Monad#(<**>)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Monad.hs:115:3 in 
course-0.1.4-inplace:Course.Monad
+      (->) 5:                                                               
           FAIL
+        Exception: todo: Course.Monad#(<**>)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Monad.hs:115:3 in 
course-0.1.4-inplace:Course.Monad
+    join
+      List:                                                                    
        FAIL
+        Exception: todo: Course.Monad#join
+        CallStack (from HasCallStack):
+          error, called at src/Course/Monad.hs:137:3 in 
course-0.1.4-inplace:Course.Monad
+      Optional with Empty:                                                  
           FAIL
+        Exception: todo: Course.Monad#join
+        CallStack (from HasCallStack):
+          error, called at src/Course/Monad.hs:137:3 in 
course-0.1.4-inplace:Course.Monad
+      Optional all Full:                                                    
           FAIL
+        Exception: todo: Course.Monad#join
+        CallStack (from HasCallStack):
+          error, called at src/Course/Monad.hs:137:3 in 
course-0.1.4-inplace:Course.Monad
+      (->):                                                                 
           FAIL
+        Exception: todo: Course.Monad#join
+        CallStack (from HasCallStack):
+          error, called at src/Course/Monad.hs:137:3 in 
course-0.1.4-inplace:Course.Monad
+    (>>=):                                                                  
           FAIL
+      Exception: todo: Course.Monad#(>>=)
+      CallStack (from HasCallStack):
+        error, called at src/Course/Monad.hs:151:3 in 
course-0.1.4-inplace:Course.Monad
+    kleislyComposition:                                                     
           FAIL
+      Exception: todo: Course.Monad#(<=<)
+      CallStack (from HasCallStack):
+        error, called at src/Course/Monad.hs:167:3 in 
course-0.1.4-inplace:Course.Monad
+  State
+    get:                                                                       
        FAIL
+      Exception: todo: Course.State#get
+      CallStack (from HasCallStack):
+        error, called at src/Course/State.hs:61:3 in 
course-0.1.4-inplace:Course.State
+    put:                                                                    
           FAIL
+      Exception: todo: Course.State#put
+      CallStack (from HasCallStack):
+        error, called at src/Course/State.hs:71:3 in 
course-0.1.4-inplace:Course.State
+    (<$>):                                                                  
           FAIL
+      Exception: todo: Course.State#(<$>)
+      CallStack (from HasCallStack):
+        error, called at src/Course/State.hs:83:5 in 
course-0.1.4-inplace:Course.State
+    Applicative
+      pure:                                                                    
        FAIL
+        Exception: todo: Course.State pure#instance (State s)
+        CallStack (from HasCallStack):
+          error, called at src/Course/State.hs:100:5 in 
course-0.1.4-inplace:Course.State
+      <*>:                                                                  
           FAIL
+        Exception: todo: Course.State (<*>)#instance (State s)
+        CallStack (from HasCallStack):
+          error, called at src/Course/State.hs:106:5 in 
course-0.1.4-inplace:Course.State
+      complicated <*>:                                                      
           FAIL
+        Exception: todo: Course.State (<*>)#instance (State s)
+        CallStack (from HasCallStack):
+          error, called at src/Course/State.hs:106:5 in 
course-0.1.4-inplace:Course.State
+    Monad
+      (=<<):                                                                   
        FAIL
+        Exception: todo: Course.State (=<<)#instance (State s)
+        CallStack (from HasCallStack):
+          error, called at src/Course/State.hs:121:5 in 
course-0.1.4-inplace:Course.State
+      (>>=):                                                                
           FAIL
+        Exception: todo: Course.Monad#(>>=)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Monad.hs:151:3 in 
course-0.1.4-inplace:Course.Monad
+    findM
+      find 'c' in 'a'..'h':                                                    
        FAIL
+        Exception: todo: Course.State#findM
+        CallStack (from HasCallStack):
+          error, called at src/Course/State.hs:143:3 in 
course-0.1.4-inplace:Course.State
+      find 'i' in 'a'..'h':                                                 
           FAIL
+        Exception: todo: Course.State#findM
+        CallStack (from HasCallStack):
+          error, called at src/Course/State.hs:143:3 in 
course-0.1.4-inplace:Course.State
+    firstRepeat
+      'x' is the only repeat:                                                  
        FAIL
+        Exception: todo: Course.State#firstRepeat
+        CallStack (from HasCallStack):
+          error, called at src/Course/State.hs:157:3 in 
course-0.1.4-inplace:Course.State
+      'x' is the first repeat:                                              
           FAIL
+        Exception: todo: Course.State#firstRepeat
+        CallStack (from HasCallStack):
+          error, called at src/Course/State.hs:157:3 in 
course-0.1.4-inplace:Course.State
+      no repeats:                                                           
           FAIL
+        Exception: todo: Course.State#firstRepeat
+        CallStack (from HasCallStack):
+          error, called at src/Course/State.hs:157:3 in 
course-0.1.4-inplace:Course.State
+      finds repeats:                                                        
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.State#firstRepeat
+          CallStack (from HasCallStack):
+            error, called at src/Course/State.hs:157:3 in 
course-0.1.4-inplace:Course.State
+        []
+        Use --quickcheck-replay=605194 to reproduce.
+      removing repeats matches nub:                                         
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.State#firstRepeat
+          CallStack (from HasCallStack):
+            error, called at src/Course/State.hs:157:3 in 
course-0.1.4-inplace:Course.State
+        []
+        Use --quickcheck-replay=233318 to reproduce.
+    distinct
+      No repeats:                                                              
        FAIL
+        Exception: todo: Course.State#distinct
+        CallStack (from HasCallStack):
+          error, called at src/Course/State.hs:170:3 in 
course-0.1.4-inplace:Course.State
+      Every element repeated:                                               
           FAIL
+        Exception: todo: Course.State#distinct
+        CallStack (from HasCallStack):
+          error, called at src/Course/State.hs:170:3 in 
course-0.1.4-inplace:Course.State
+      No repeats after distinct:                                            
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.State#firstRepeat
+          CallStack (from HasCallStack):
+            error, called at src/Course/State.hs:157:3 in 
course-0.1.4-inplace:Course.State
+        []
+        Use --quickcheck-replay=275621 to reproduce.
+      Every element repeated:                                               
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.State#distinct
+          CallStack (from HasCallStack):
+            error, called at src/Course/State.hs:170:3 in 
course-0.1.4-inplace:Course.State
+        []
+        Use --quickcheck-replay=224172 to reproduce.
+    isHappy
+      4:                                                                       
        FAIL
+        Exception: todo: Course.State#isHappy
+        CallStack (from HasCallStack):
+          error, called at src/Course/State.hs:197:3 in 
course-0.1.4-inplace:Course.State
+      7:                                                                    
           FAIL
+        Exception: todo: Course.State#isHappy
+        CallStack (from HasCallStack):
+          error, called at src/Course/State.hs:197:3 in 
course-0.1.4-inplace:Course.State
+      42:                                                                   
           FAIL
+        Exception: todo: Course.State#isHappy
+        CallStack (from HasCallStack):
+          error, called at src/Course/State.hs:197:3 in 
course-0.1.4-inplace:Course.State
+      44:                                                                   
           FAIL
+        Exception: todo: Course.State#isHappy
+        CallStack (from HasCallStack):
+          error, called at src/Course/State.hs:197:3 in 
course-0.1.4-inplace:Course.State
+  StateT
+    <$>:                                                                       
        FAIL
+      Exception: todo: Course.StateT (<$>)#instance (StateT s f)
+      CallStack (from HasCallStack):
+        error, called at src/Course/StateT.hs:43:5 in 
course-0.1.4-inplace:Course.StateT
+    Applicative
+      List (pure):                                                             
        FAIL
+        Exception: todo: Course.StateT pure#instance (StateT s f)
+        CallStack (from HasCallStack):
+          error, called at src/Course/StateT.hs:66:5 in 
course-0.1.4-inplace:Course.StateT
+      List (<*>):                                                           
           FAIL
+        Exception: todo: Course.StateT (<*>)#instance (StateT s f)
+        CallStack (from HasCallStack):
+          error, called at src/Course/StateT.hs:72:5 in 
course-0.1.4-inplace:Course.StateT
+      Optional:                                                             
           FAIL
+        Exception: todo: Course.StateT (<*>)#instance (StateT s f)
+        CallStack (from HasCallStack):
+          error, called at src/Course/StateT.hs:72:5 in 
course-0.1.4-inplace:Course.StateT
+      List:                                                                 
           FAIL
+        Exception: todo: Course.StateT (<*>)#instance (StateT s f)
+        CallStack (from HasCallStack):
+          error, called at src/Course/StateT.hs:72:5 in 
course-0.1.4-inplace:Course.StateT
+    Monad
+      bind const:                                                              
        FAIL
+        Exception: todo: Course.StateT (=<<)#instance (StateT s f)
+        CallStack (from HasCallStack):
+          error, called at src/Course/StateT.hs:88:5 in 
course-0.1.4-inplace:Course.StateT
+      modify:                                                               
           FAIL
+        Exception: todo: Course.Monad#(>>=)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Monad.hs:151:3 in 
course-0.1.4-inplace:Course.Monad
+    state':                                                                 
           FAIL
+      Exception: todo: Course.StateT#state'
+      CallStack (from HasCallStack):
+        error, called at src/Course/StateT.hs:102:3 in 
course-0.1.4-inplace:Course.StateT
+    runState':                                                              
           FAIL
+      Exception: todo: Course.StateT#runState'
+      CallStack (from HasCallStack):
+        error, called at src/Course/StateT.hs:113:3 in 
course-0.1.4-inplace:Course.StateT
+    execTTest:                                                              
           FAIL
+      Exception: todo: Course.StateT#execT
+      CallStack (from HasCallStack):
+        error, called at src/Course/StateT.hs:125:3 in 
course-0.1.4-inplace:Course.StateT
+    exec'Test:                                                              
           FAIL
+      Exception: todo: Course.StateT#exec'
+      CallStack (from HasCallStack):
+        error, called at src/Course/StateT.hs:136:3 in 
course-0.1.4-inplace:Course.StateT
+    evalTTest:                                                              
           FAIL
+      Exception: todo: Course.StateT#evalT
+      CallStack (from HasCallStack):
+        error, called at src/Course/StateT.hs:148:3 in 
course-0.1.4-inplace:Course.StateT
+    eval'Test:                                                              
           FAIL
+      Exception: todo: Course.StateT#eval'
+      CallStack (from HasCallStack):
+        error, called at src/Course/StateT.hs:159:3 in 
course-0.1.4-inplace:Course.StateT
+    getTTest:                                                               
           FAIL
+      Exception: todo: Course.StateT#getT
+      CallStack (from HasCallStack):
+        error, called at src/Course/StateT.hs:169:3 in 
course-0.1.4-inplace:Course.StateT
+    putTTest:                                                               
           FAIL
+      Exception: todo: Course.StateT#putT
+      CallStack (from HasCallStack):
+        error, called at src/Course/StateT.hs:183:3 in 
course-0.1.4-inplace:Course.StateT
+    distinct'
+      removes duplicate 'c's:                                                  
        FAIL
+        Exception: todo: Course.StateT#distinct'
+        CallStack (from HasCallStack):
+          error, called at src/Course/StateT.hs:195:3 in 
course-0.1.4-inplace:Course.StateT
+      distinct':                                                            
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.StateT#distinct'
+          CallStack (from HasCallStack):
+            error, called at src/Course/StateT.hs:195:3 in 
course-0.1.4-inplace:Course.StateT
+        []
+        Use --quickcheck-replay=48265 to reproduce.
+    distinctF
+      Full case:                                                               
        FAIL
+        Exception: todo: Course.StateT#distinctF
+        CallStack (from HasCallStack):
+          error, called at src/Course/StateT.hs:213:3 in 
course-0.1.4-inplace:Course.StateT
+      Empty case:                                                           
           FAIL
+        Exception: todo: Course.StateT#distinctF
+        CallStack (from HasCallStack):
+          error, called at src/Course/StateT.hs:213:3 in 
course-0.1.4-inplace:Course.StateT
+    (<$>) for OptionalT:                                                    
           FAIL
+      Exception: todo: Course.StateT (<$>)#instance (OptionalT f)
+      CallStack (from HasCallStack):
+        error, called at src/Course/StateT.hs:232:5 in 
course-0.1.4-inplace:Course.StateT
+    (<*>) for OptionalT
+      one:                                                                     
        FAIL
+        Exception: todo: Course.StateT (<*>)#instance (OptionalT f)
+        CallStack (from HasCallStack):
+          error, called at src/Course/StateT.hs:270:5 in 
course-0.1.4-inplace:Course.StateT
+      two:                                                                  
           FAIL
+        Exception: todo: Course.StateT (<*>)#instance (OptionalT f)
+        CallStack (from HasCallStack):
+          error, called at src/Course/StateT.hs:270:5 in 
course-0.1.4-inplace:Course.StateT
+      three:                                                                
           FAIL
+        Exception: todo: Course.StateT (<*>)#instance (OptionalT f)
+        CallStack (from HasCallStack):
+          error, called at src/Course/StateT.hs:270:5 in 
course-0.1.4-inplace:Course.StateT
+      four:                                                                 
           FAIL
+        Exception: todo: Course.StateT (<*>)#instance (OptionalT f)
+        CallStack (from HasCallStack):
+          error, called at src/Course/StateT.hs:270:5 in 
course-0.1.4-inplace:Course.StateT
+      five:                                                                 
           FAIL
+        Exception: todo: Course.StateT (<*>)#instance (OptionalT f)
+        CallStack (from HasCallStack):
+          error, called at src/Course/StateT.hs:270:5 in 
course-0.1.4-inplace:Course.StateT
+      six:                                                                  
           FAIL
+        Exception: todo: Course.StateT (<*>)#instance (OptionalT f)
+        CallStack (from HasCallStack):
+          error, called at src/Course/StateT.hs:270:5 in 
course-0.1.4-inplace:Course.StateT
+      seven:                                                                
           FAIL
+        Exception: todo: Course.StateT (<*>)#instance (OptionalT f)
+        CallStack (from HasCallStack):
+          error, called at src/Course/StateT.hs:270:5 in 
course-0.1.4-inplace:Course.StateT
+    (=<<) for OptionalT:                                                    
           FAIL
+      Exception: todo: Course.StateT (=<<)#instance (OptionalT f)
+      CallStack (from HasCallStack):
+        error, called at src/Course/StateT.hs:282:5 in 
course-0.1.4-inplace:Course.StateT
+    (<$>) for Logger:                                                       
           FAIL
+      Exception: todo: Course.StateT (<$>)#instance (Logger l)
+      CallStack (from HasCallStack):
+        error, called at src/Course/StateT.hs:299:5 in 
course-0.1.4-inplace:Course.StateT
+    Logger Applicative
+      pure:                                                                    
        FAIL
+        Exception: todo: Course.StateT pure#instance (Logger l)
+        CallStack (from HasCallStack):
+          error, called at src/Course/StateT.hs:313:5 in 
course-0.1.4-inplace:Course.StateT
+      <*>:                                                                  
           FAIL
+        Exception: todo: Course.StateT (<*>)#instance (Logger l)
+        CallStack (from HasCallStack):
+          error, called at src/Course/StateT.hs:320:5 in 
course-0.1.4-inplace:Course.StateT
+    (=<<) for Logger:                                                       
           FAIL
+      Exception: todo: Course.StateT (=<<)#instance (Logger l)
+      CallStack (from HasCallStack):
+        error, called at src/Course/StateT.hs:333:5 in 
course-0.1.4-inplace:Course.StateT
+    log1:                                                                   
           FAIL
+      Exception: todo: Course.StateT#log1
+      CallStack (from HasCallStack):
+        error, called at src/Course/StateT.hs:344:3 in 
course-0.1.4-inplace:Course.StateT
+    distinctG
+      Full case:                                                               
        FAIL
+        Exception: todo: Course.StateT#distinctG
+        CallStack (from HasCallStack):
+          error, called at src/Course/StateT.hs:365:3 in 
course-0.1.4-inplace:Course.StateT
+      Empty case:                                                           
           FAIL
+        Exception: todo: Course.StateT#distinctG
+        CallStack (from HasCallStack):
+          error, called at src/Course/StateT.hs:365:3 in 
course-0.1.4-inplace:Course.StateT
+  Validation
+    isError
+      true for errors:                                                         
        OK
+      false for values:                                                     
           OK
+      not the same as isValue:                                              
           OK
+        +++ OK, passed 100 tests.
+    isValue
+      false for errors:                                                        
        OK
+      false for values:                                                     
           OK
+      not the same as isValue:                                              
           OK
+        +++ OK, passed 100 tests.
+    mapValidation
+      errors unchanged:                                                        
        OK
+      values changed:                                                       
           OK
+      map with id causes no change:                                         
           OK
+        +++ OK, passed 100 tests.
+    bindValidation
+      error unchanged:                                                         
        OK
+      odd value:                                                            
           OK
+      even value:                                                           
           OK
+      bind with Value causes no change:                                     
           OK
+        +++ OK, passed 100 tests.
+    valueOr
+      falls through for errors:                                                
        OK
+      unwraps values:                                                       
           OK
+      isValue or valueOr falls through:                                     
           OK
+        +++ OK, passed 100 tests.
+    errorOr
+      unwraps errors:                                                          
        OK
+      falls through for values:                                             
           OK
+      isError or errorOr falls through:                                     
           OK
+        +++ OK, passed 100 tests.
+  Extend
+    ExactlyOne instance:                                                       
        FAIL
+      Exception: todo: Course.Extend (<<=)#instance ExactlyOne
+      CallStack (from HasCallStack):
+        error, called at src/Course/Extend.hs:37:5 in 
course-0.1.4-inplace:Course.Extend
+    List
+      length:                                                                  
        FAIL
+        Exception: todo: Course.Extend (<<=)#instance List
+        CallStack (from HasCallStack):
+          error, called at src/Course/Extend.hs:55:5 in 
course-0.1.4-inplace:Course.Extend
+      id:                                                                   
           FAIL
+        Exception: todo: Course.Extend (<<=)#instance List
+        CallStack (from HasCallStack):
+          error, called at src/Course/Extend.hs:55:5 in 
course-0.1.4-inplace:Course.Extend
+      reverse:                                                              
           FAIL
+        Exception: todo: Course.Extend (<<=)#instance List
+        CallStack (from HasCallStack):
+          error, called at src/Course/Extend.hs:55:5 in 
course-0.1.4-inplace:Course.Extend
+    Optional
+      id Full:                                                                 
        FAIL
+        Exception: todo: Course.Extend (<<=)#instance Optional
+        CallStack (from HasCallStack):
+          error, called at src/Course/Extend.hs:70:5 in 
course-0.1.4-inplace:Course.Extend
+      id Empty:                                                             
           FAIL
+        Exception: todo: Course.Extend (<<=)#instance Optional
+        CallStack (from HasCallStack):
+          error, called at src/Course/Extend.hs:70:5 in 
course-0.1.4-inplace:Course.Extend
+    cojoin
+      ExactlyOne:                                                              
        FAIL
+        Exception: todo: Course.Extend#cojoin
+        CallStack (from HasCallStack):
+          error, called at src/Course/Extend.hs:90:3 in 
course-0.1.4-inplace:Course.Extend
+      List:                                                                 
           FAIL
+        Exception: todo: Course.Extend#cojoin
+        CallStack (from HasCallStack):
+          error, called at src/Course/Extend.hs:90:3 in 
course-0.1.4-inplace:Course.Extend
+      Full:                                                                 
           FAIL
+        Exception: todo: Course.Extend#cojoin
+        CallStack (from HasCallStack):
+          error, called at src/Course/Extend.hs:90:3 in 
course-0.1.4-inplace:Course.Extend
+      Empty:                                                                
           FAIL
+        Exception: todo: Course.Extend#cojoin
+        CallStack (from HasCallStack):
+          error, called at src/Course/Extend.hs:90:3 in 
course-0.1.4-inplace:Course.Extend
+  Comonad
+    ExactlyOne:                                                                
        FAIL
+      Exception: todo: Course.Comonad copure#instance ExactlyOne
+      CallStack (from HasCallStack):
+        error, called at src/Course/Comonad.hs:33:5 in 
course-0.1.4-inplace:Course.Comonad
+    <$$>:                                                                   
           FAIL
+      Exception: todo: Course.Comonad#(<$>)
+      CallStack (from HasCallStack):
+        error, called at src/Course/Comonad.hs:45:3 in 
course-0.1.4-inplace:Course.Comonad
+  Traversable
+    listTest
+      traverse on empty list:                                                  
        FAIL
+        Exception: todo: Course.Applicative pure#instance Optional
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:95:5 in 
course-0.1.4-inplace:Course.Applicative
+      traverse on non-empty list:                                           
           FAIL
+        Exception: todo: Course.Apply (<*>)#instance Optional
+        CallStack (from HasCallStack):
+          error, called at src/Course/Applicative.hs:101:5 in 
course-0.1.4-inplace:Course.Applicative
+    exactlyOneTest
+      traverse on ExactlyOne:                                                  
        FAIL
+        Exception: todo: Course.Traversable traverse#instance 
ExactlyOne
+        CallStack (from HasCallStack):
+          error, called at src/Course/Traversable.hs:49:5 in 
course-0.1.4-inplace:Course.Traversable
+    optionalTest
+      traverse on Empty:                                                       
        FAIL
+        Exception: todo: Course.Traversable traverse#instance 
Optional
+        CallStack (from HasCallStack):
+          error, called at src/Course/Traversable.hs:58:5 in 
course-0.1.4-inplace:Course.Traversable
+      traverse on Full:                                                     
           FAIL
+        Exception: todo: Course.Traversable traverse#instance 
Optional
+        CallStack (from HasCallStack):
+          error, called at src/Course/Traversable.hs:58:5 in 
course-0.1.4-inplace:Course.Traversable
+    sequenceATest
+      on List over ExactlyOne:                                                 
        FAIL
+        Exception: todo: Course.Traversable#sequenceA
+        CallStack (from HasCallStack):
+          error, called at src/Course/Traversable.hs:75:3 in 
course-0.1.4-inplace:Course.Traversable
+      on Optional over ExactlyOne:                                          
           FAIL
+        Exception: todo: Course.Traversable#sequenceA
+        CallStack (from HasCallStack):
+          error, called at src/Course/Traversable.hs:75:3 in 
course-0.1.4-inplace:Course.Traversable
+      on Optional over function:                                            
           FAIL
+        Exception: todo: Course.Traversable#sequenceA
+        CallStack (from HasCallStack):
+          error, called at src/Course/Traversable.hs:75:3 in 
course-0.1.4-inplace:Course.Traversable
+    composeTest
+      traverse on Compose Optional List Int:                                   
        FAIL
+        Exception: todo: Course.Traversable traverse#instance 
(Compose f g)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Traversable.hs:81:5 in 
course-0.1.4-inplace:Course.Traversable
+      traverse on Compose List ExactlyOne Int:                              
           FAIL
+        Exception: todo: Course.Traversable traverse#instance 
(Compose f g)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Traversable.hs:81:5 in 
course-0.1.4-inplace:Course.Traversable
+    productFunctorTest
+      fmap on Product Optional List Int:                                       
        FAIL
+        Exception: todo: Course.Traversable (<$>)#instance (Product 
f g)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Traversable.hs:91:5 in 
course-0.1.4-inplace:Course.Traversable
+      fmap on Product ExactlyOne Optional Int:                              
           FAIL
+        Exception: todo: Course.Traversable (<$>)#instance (Product 
f g)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Traversable.hs:91:5 in 
course-0.1.4-inplace:Course.Traversable
+    productTraversableTest
+      traverse on Product Optional List Int:                                   
        FAIL
+        Exception: todo: Course.Traversable traverse#instance 
(Product f g)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Traversable.hs:97:5 in 
course-0.1.4-inplace:Course.Traversable
+    coProductFunctorTest
+      fmap on InL Optional Int:                                                
        FAIL
+        Exception: todo: Course.Traversable (<$>)#instance 
(Coproduct f g)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Traversable.hs:108:5 in 
course-0.1.4-inplace:Course.Traversable
+      fmap on InR ExactlyOne Int:                                           
           FAIL
+        Exception: todo: Course.Traversable (<$>)#instance 
(Coproduct f g)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Traversable.hs:108:5 in 
course-0.1.4-inplace:Course.Traversable
+    coProductTraversableTest
+      traverse on InL Optional Int:                                            
        FAIL
+        Exception: todo: Course.Traversable traverse#instance 
(Coproduct f g)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Traversable.hs:114:5 in 
course-0.1.4-inplace:Course.Traversable
+      traverse on InR List Int:                                             
           FAIL
+        Exception: todo: Course.Traversable traverse#instance 
(Coproduct f g)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Traversable.hs:114:5 in 
course-0.1.4-inplace:Course.Traversable
+  ListZipper
+    ListZipper (<$>):                                                          
        FAIL
+      Exception: todo: Course.ListZipper (<$>)#instance ListZipper
+      CallStack (from HasCallStack):
+        error, called at src/Course/ListZipper.hs:68:5 in 
course-0.1.4-inplace:Course.ListZipper
+    MaybeListZipper (<$>):                                                  
           FAIL
+      Exception: todo: Course.ListZipper (<$>)#instance 
MaybeListZipper
+      CallStack (from HasCallStack):
+        error, called at src/Course/ListZipper.hs:76:5 in 
course-0.1.4-inplace:Course.ListZipper
+    toList
+      Optional empty list:                                                     
        FAIL
+        Exception: todo: Course.Functor (<$>)#instance Optional
+        CallStack (from HasCallStack):
+          error, called at src/Course/Functor.hs:75:5 in 
course-0.1.4-inplace:Course.Functor
+      empty left:                                                           
           FAIL
+        Exception: todo: Course.ListZipper#toList
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:92:3 in 
course-0.1.4-inplace:Course.ListZipper
+      lefts and rights:                                                     
           FAIL
+        Exception: todo: Course.ListZipper#toList
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:92:3 in 
course-0.1.4-inplace:Course.ListZipper
+    fromList
+      non-empty:                                                               
        FAIL
+        Exception: todo: Course.ListZipper#fromList
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:116:3 in 
course-0.1.4-inplace:Course.ListZipper
+      empty:                                                                
           FAIL
+        Exception: todo: Course.ListZipper#fromList
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:116:3 in 
course-0.1.4-inplace:Course.ListZipper
+      round trip:                                                           
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.ListZipper#fromList
+          CallStack (from HasCallStack):
+            error, called at src/Course/ListZipper.hs:116:3 in 
course-0.1.4-inplace:Course.ListZipper
+        []
+        Use --quickcheck-replay=497955 to reproduce.
+    toOptional
+      empty:                                                                   
        FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.ListZipper#toOptional
+          CallStack (from HasCallStack):
+            error, called at src/Course/ListZipper.hs:127:3 in 
course-0.1.4-inplace:Course.ListZipper
+        []
+        Use --quickcheck-replay=839372 to reproduce.
+    withFocus
+      empty left:                                                              
        FAIL
+        Exception: todo: Course.ListZipper#withFocus
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:187:3 in 
course-0.1.4-inplace:Course.ListZipper
+      left and right:                                                       
           FAIL
+        Exception: todo: Course.ListZipper#withFocus
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:187:3 in 
course-0.1.4-inplace:Course.ListZipper
+    setFocus
+      empty left:                                                              
        FAIL
+        Exception: todo: Course.ListZipper#setFocus
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:202:3 in 
course-0.1.4-inplace:Course.ListZipper
+      left and right:                                                       
           FAIL
+        Exception: todo: Course.ListZipper#setFocus
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:202:3 in 
course-0.1.4-inplace:Course.ListZipper
+    hasLeft
+      left and right:                                                          
        FAIL
+        Exception: todo: Course.ListZipper#hasLeft
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:225:3 in 
course-0.1.4-inplace:Course.ListZipper
+      empty left:                                                           
           FAIL
+        Exception: todo: Course.ListZipper#hasLeft
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:225:3 in 
course-0.1.4-inplace:Course.ListZipper
+    hasRight
+      left and right:                                                          
        FAIL
+        Exception: todo: Course.ListZipper#hasRight
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:238:3 in 
course-0.1.4-inplace:Course.ListZipper
+      empty right:                                                          
           FAIL
+        Exception: todo: Course.ListZipper#hasRight
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:238:3 in 
course-0.1.4-inplace:Course.ListZipper
+    findLeft
+      missing element returns IsNotZ:                                          
        FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.ListZipper#fromList
+          CallStack (from HasCallStack):
+            error, called at src/Course/ListZipper.hs:116:3 in 
course-0.1.4-inplace:Course.ListZipper
+        []
+        False
+        Use --quickcheck-replay=632697 to reproduce.
+      found in left:                                                        
           FAIL
+        Exception: todo: Course.ListZipper#findLeft
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:266:3 in 
course-0.1.4-inplace:Course.ListZipper
+      not found:                                                            
           FAIL
+        Exception: todo: Course.ListZipper#findLeft
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:266:3 in 
course-0.1.4-inplace:Course.ListZipper
+      one match in left:                                                    
           FAIL
+        Exception: todo: Course.ListZipper#findLeft
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:266:3 in 
course-0.1.4-inplace:Course.ListZipper
+      multiple matches in left:                                             
           FAIL
+        Exception: todo: Course.ListZipper#findLeft
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:266:3 in 
course-0.1.4-inplace:Course.ListZipper
+      elements shifted to right correctly:                                  
           FAIL
+        Exception: todo: Course.ListZipper#findLeft
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:266:3 in 
course-0.1.4-inplace:Course.ListZipper
+    findRight
+      missing element returns IsNotZ:                                          
        FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.ListZipper#fromList
+          CallStack (from HasCallStack):
+            error, called at src/Course/ListZipper.hs:116:3 in 
course-0.1.4-inplace:Course.ListZipper
+        []
+        Use --quickcheck-replay=23572 to reproduce.
+      found in right:                                                       
           FAIL
+        Exception: todo: Course.ListZipper#findRight
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:291:3 in 
course-0.1.4-inplace:Course.ListZipper
+      not found:                                                            
           FAIL
+        Exception: todo: Course.ListZipper#findRight
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:291:3 in 
course-0.1.4-inplace:Course.ListZipper
+      one match in right:                                                   
           FAIL
+        Exception: todo: Course.ListZipper#findRight
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:291:3 in 
course-0.1.4-inplace:Course.ListZipper
+      multiple matches in right:                                            
           FAIL
+        Exception: todo: Course.ListZipper#findRight
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:291:3 in 
course-0.1.4-inplace:Course.ListZipper
+    moveLeftLoop
+      with left:                                                               
        FAIL
+        Exception: todo: Course.ListZipper#moveLeftLoop
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:304:3 in 
course-0.1.4-inplace:Course.ListZipper
+      empty left:                                                           
           FAIL
+        Exception: todo: Course.ListZipper#moveLeftLoop
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:304:3 in 
course-0.1.4-inplace:Course.ListZipper
+    moveRightLoop
+      with right:                                                              
        FAIL
+        Exception: todo: Course.ListZipper#moveRightLoop
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:317:3 in 
course-0.1.4-inplace:Course.ListZipper
+      empty right:                                                          
           FAIL
+        Exception: todo: Course.ListZipper#moveRightLoop
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:317:3 in 
course-0.1.4-inplace:Course.ListZipper
+    moveLeft
+      with left:                                                               
        FAIL
+        Exception: todo: Course.ListZipper#moveLeft
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:330:3 in 
course-0.1.4-inplace:Course.ListZipper
+      empty left:                                                           
           FAIL
+        Exception: todo: Course.ListZipper#moveLeft
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:330:3 in 
course-0.1.4-inplace:Course.ListZipper
+    moveRight
+      with right:                                                              
        FAIL
+        Exception: todo: Course.ListZipper#moveRight
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:343:3 in 
course-0.1.4-inplace:Course.ListZipper
+      empty right:                                                          
           FAIL
+        Exception: todo: Course.ListZipper#moveRight
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:343:3 in 
course-0.1.4-inplace:Course.ListZipper
+    swapLeft
+      with left:                                                               
        FAIL
+        Exception: todo: Course.ListZipper#swapLeft
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:356:3 in 
course-0.1.4-inplace:Course.ListZipper
+      empty left:                                                           
           FAIL
+        Exception: todo: Course.ListZipper#swapLeft
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:356:3 in 
course-0.1.4-inplace:Course.ListZipper
+    swapRight
+      with right:                                                              
        FAIL
+        Exception: todo: Course.ListZipper#swapRight
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:369:3 in 
course-0.1.4-inplace:Course.ListZipper
+      empty right:                                                          
           FAIL
+        Exception: todo: Course.ListZipper#swapRight
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:369:3 in 
course-0.1.4-inplace:Course.ListZipper
+    dropLeft
+      with left:                                                               
        FAIL
+        Exception: todo: Course.ListZipper#dropLefts
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:384:3 in 
course-0.1.4-inplace:Course.ListZipper
+      empty left:                                                           
           FAIL
+        Exception: todo: Course.ListZipper#dropLefts
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:384:3 in 
course-0.1.4-inplace:Course.ListZipper
+      dropLefts empties left of zipper:                                     
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.ListZipper#dropLefts
+          CallStack (from HasCallStack):
+            error, called at src/Course/ListZipper.hs:384:3 in 
course-0.1.4-inplace:Course.ListZipper
+        [] >0< []
+        Use --quickcheck-replay=852942 to reproduce.
+    dropRights
+      with right:                                                              
        FAIL
+        Exception: todo: Course.ListZipper#dropRights
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:399:3 in 
course-0.1.4-inplace:Course.ListZipper
+      empty right:                                                          
           FAIL
+        Exception: todo: Course.ListZipper#dropRights
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:399:3 in 
course-0.1.4-inplace:Course.ListZipper
+      dropRights empties right of zipper:                                   
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.ListZipper#dropRights
+          CallStack (from HasCallStack):
+            error, called at src/Course/ListZipper.hs:399:3 in 
course-0.1.4-inplace:Course.ListZipper
+        [] >0< []
+        Use --quickcheck-replay=876174 to reproduce.
+    moveLeftN
+      positive moves:                                                          
        FAIL
+        Exception: todo: Course.ListZipper#moveLeftN
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:413:3 in 
course-0.1.4-inplace:Course.ListZipper
+      negative moves:                                                       
           FAIL
+        Exception: todo: Course.ListZipper#moveLeftN
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:413:3 in 
course-0.1.4-inplace:Course.ListZipper
+    moveRightN
+      positive moves:                                                          
        FAIL
+        Exception: todo: Course.ListZipper#moveRightN
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:427:3 in 
course-0.1.4-inplace:Course.ListZipper
+      negative moves:                                                       
           FAIL
+        Exception: todo: Course.ListZipper#moveRightN
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:427:3 in 
course-0.1.4-inplace:Course.ListZipper
+    moveLeftN'
+      positive - out of bounds both sides:                                     
        FAIL
+        Exception: todo: Course.ListZipper#moveLeftN'
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:457:3 in 
course-0.1.4-inplace:Course.ListZipper
+      positive in range:                                                    
           FAIL
+        Exception: todo: Course.ListZipper#moveLeftN'
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:457:3 in 
course-0.1.4-inplace:Course.ListZipper
+      moving zero is `Right . id`:                                          
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.ListZipper#moveLeftN'
+          CallStack (from HasCallStack):
+            error, called at src/Course/ListZipper.hs:457:3 in 
course-0.1.4-inplace:Course.ListZipper
+        [] >0< []
+        Use --quickcheck-replay=916083 to reproduce.
+      negative in range:                                                    
           FAIL
+        Exception: todo: Course.ListZipper#moveLeftN'
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:457:3 in 
course-0.1.4-inplace:Course.ListZipper
+      negative out of bounds:                                               
           FAIL
+        Exception: todo: Course.ListZipper#moveLeftN'
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:457:3 in 
course-0.1.4-inplace:Course.ListZipper
+      positive - out of bounds on left only:                                
           FAIL
+        Exception: todo: Course.ListZipper#moveLeftN'
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:457:3 in 
course-0.1.4-inplace:Course.ListZipper
+      negative - out of bounds on right only:                               
           FAIL
+        Exception: todo: Course.ListZipper#moveLeftN'
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:457:3 in 
course-0.1.4-inplace:Course.ListZipper
+    moveRightN'
+      positive - out of bounds both sides:                                     
        FAIL
+        Exception: todo: Course.ListZipper#moveRightN'
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:481:3 in 
course-0.1.4-inplace:Course.ListZipper
+      positive in range:                                                    
           FAIL
+        Exception: todo: Course.ListZipper#moveRightN'
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:481:3 in 
course-0.1.4-inplace:Course.ListZipper
+      moving zero is `Right . id`:                                          
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.ListZipper#moveRightN'
+          CallStack (from HasCallStack):
+            error, called at src/Course/ListZipper.hs:481:3 in 
course-0.1.4-inplace:Course.ListZipper
+        [] >0< []
+        Use --quickcheck-replay=416654 to reproduce.
+      negative in range:                                                    
           FAIL
+        Exception: todo: Course.ListZipper#moveRightN'
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:481:3 in 
course-0.1.4-inplace:Course.ListZipper
+      negative - out of bounds both sides:                                  
           FAIL
+        Exception: todo: Course.ListZipper#moveRightN'
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:481:3 in 
course-0.1.4-inplace:Course.ListZipper
+    nth
+      have 1:                                                                  
        FAIL
+        Exception: todo: Course.ListZipper#nth
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:498:3 in 
course-0.1.4-inplace:Course.ListZipper
+      have 5:                                                               
           FAIL
+        Exception: todo: Course.ListZipper#nth
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:498:3 in 
course-0.1.4-inplace:Course.ListZipper
+      missing 8:                                                            
           FAIL
+        Exception: todo: Course.ListZipper#nth
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:498:3 in 
course-0.1.4-inplace:Course.ListZipper
+    index
+      index works:                                                             
        FAIL
+        Exception: todo: Course.ListZipper#index
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:510:3 in 
course-0.1.4-inplace:Course.ListZipper
+      Always returns the index on a valid zipper:                           
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.ListZipper#toOptional
+          CallStack (from HasCallStack):
+            error, called at src/Course/ListZipper.hs:127:3 in 
course-0.1.4-inplace:Course.ListZipper
+        ([] >0< [],0)
+        Use --quickcheck-replay=641600 to reproduce.
+    end
+      end:                                                                     
        FAIL
+        Exception: todo: Course.ListZipper#end
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:524:3 in 
course-0.1.4-inplace:Course.ListZipper
+      end never changes the zipper's contents:                              
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.ListZipper#toList
+          CallStack (from HasCallStack):
+            error, called at src/Course/ListZipper.hs:92:3 in 
course-0.1.4-inplace:Course.ListZipper
+        [] >0< []
+        Use --quickcheck-replay=338045 to reproduce.
+      never have rights after calling end:                                  
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.ListZipper#end
+          CallStack (from HasCallStack):
+            error, called at src/Course/ListZipper.hs:524:3 in 
course-0.1.4-inplace:Course.ListZipper
+        [] >0< []
+        Use --quickcheck-replay=330761 to reproduce.
+    start
+      start:                                                                   
        FAIL
+        Exception: todo: Course.ListZipper#start
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:538:3 in 
course-0.1.4-inplace:Course.ListZipper
+      start never changes the zipper's contents:                            
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.ListZipper#toList
+          CallStack (from HasCallStack):
+            error, called at src/Course/ListZipper.hs:92:3 in 
course-0.1.4-inplace:Course.ListZipper
+        [] >0< []
+        Use --quickcheck-replay=837438 to reproduce.
+      never have lefts after calling start:                                 
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.ListZipper#start
+          CallStack (from HasCallStack):
+            error, called at src/Course/ListZipper.hs:538:3 in 
course-0.1.4-inplace:Course.ListZipper
+        [] >0< []
+        Use --quickcheck-replay=92310 to reproduce.
+    deletePullLeft
+      non-empty lefts:                                                         
        FAIL
+        Exception: todo: Course.ListZipper#deletePullLeft
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:551:3 in 
course-0.1.4-inplace:Course.ListZipper
+      empty lefts:                                                          
           FAIL
+        Exception: todo: Course.ListZipper#deletePullLeft
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:551:3 in 
course-0.1.4-inplace:Course.ListZipper
+    deletePullRight
+      non-empty rights:                                                        
        FAIL
+        Exception: todo: Course.ListZipper#deletePullRight
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:564:3 in 
course-0.1.4-inplace:Course.ListZipper
+      empty rights:                                                         
           FAIL
+        Exception: todo: Course.ListZipper#deletePullRight
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:564:3 in 
course-0.1.4-inplace:Course.ListZipper
+    insertPushLeft
+      non-empty lefts:                                                         
        FAIL
+        Exception: todo: Course.ListZipper#insertPushLeft
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:580:3 in 
course-0.1.4-inplace:Course.ListZipper
+      empty lefts:                                                          
           FAIL
+        Exception: todo: Course.ListZipper#insertPushLeft
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:580:3 in 
course-0.1.4-inplace:Course.ListZipper
+      deletePullLeft . insertPushLeft == id:                                
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.ListZipper#toOptional
+          CallStack (from HasCallStack):
+            error, called at src/Course/ListZipper.hs:127:3 in 
course-0.1.4-inplace:Course.ListZipper
+        [] >0< []
+        0
+        Use --quickcheck-replay=389162 to reproduce.
+    insertPushRight
+      non-empty rights:                                                        
        FAIL
+        Exception: todo: Course.ListZipper#insertPushRight
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:596:3 in 
course-0.1.4-inplace:Course.ListZipper
+      empty rights:                                                         
           FAIL
+        Exception: todo: Course.ListZipper#insertPushRight
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:596:3 in 
course-0.1.4-inplace:Course.ListZipper
+      deletePullRight . insertPushRight == id:                              
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.ListZipper#toOptional
+          CallStack (from HasCallStack):
+            error, called at src/Course/ListZipper.hs:127:3 in 
course-0.1.4-inplace:Course.ListZipper
+        [] >0< []
+        0
+        Use --quickcheck-replay=173350 to reproduce.
+    Applicative
+      pure produces infinite lefts:                                            
        FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.Apply (<*>)#instance ((->) t)
+          CallStack (from HasCallStack):
+            error, called at src/Course/Applicative.hs:132:5 in 
course-0.1.4-inplace:Course.Applicative
+        0
+        0
+        Use --quickcheck-replay=568135 to reproduce.
+      pure produces infinite rights:                                        
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.Apply (<*>)#instance ((->) t)
+          CallStack (from HasCallStack):
+            error, called at src/Course/Applicative.hs:132:5 in 
course-0.1.4-inplace:Course.Applicative
+        0
+        0
+        Use --quickcheck-replay=315523 to reproduce.
+      <*> applies functions to corresponding elements in zipper:            
           FAIL
+        Exception: todo: Course.ListZipper (<*>)#instance ListZipper
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:614:5 in 
course-0.1.4-inplace:Course.ListZipper
+    Applicative (MaybeListZipper)
+      pure produces infinite lefts:                                            
        FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.Apply (<*>)#instance ((->) t)
+          CallStack (from HasCallStack):
+            error, called at src/Course/Applicative.hs:132:5 in 
course-0.1.4-inplace:Course.Applicative
+        0
+        0
+        Use --quickcheck-replay=824521 to reproduce.
+      pure produces infinite rights:                                        
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.Apply (<*>)#instance ((->) t)
+          CallStack (from HasCallStack):
+            error, called at src/Course/Applicative.hs:132:5 in 
course-0.1.4-inplace:Course.Applicative
+        0
+        0
+        Use --quickcheck-replay=151535 to reproduce.
+      IsZ <*> IsZ:                                                          
           FAIL
+        Exception: todo: Course.ListZipper (<*>)#instance 
MaybeListZipper
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:640:5 in 
course-0.1.4-inplace:Course.ListZipper
+      IsNotZ <*> IsZ:                                                       
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.ListZipper (<*>)#instance MaybeListZipper
+          CallStack (from HasCallStack):
+            error, called at src/Course/ListZipper.hs:640:5 in 
course-0.1.4-inplace:Course.ListZipper
+        [] >0< []
+        Use --quickcheck-replay=954645 to reproduce.
+      IsNotZ <*> IsNotZ:                                                    
           FAIL
+        Exception: todo: Course.ListZipper (<*>)#instance 
MaybeListZipper
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:640:5 in 
course-0.1.4-inplace:Course.ListZipper
+    Extend
+      zipper o' zippers:                                                       
        FAIL
+        Exception: todo: Course.ListZipper (<<=)#instance ListZipper
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:651:5 in 
course-0.1.4-inplace:Course.ListZipper
+    Extend (MaybeListZipper)
+      IsNotZ:                                                                  
        FAIL
+        Exception: todo: Course.ListZipper (<<=)#instance 
MaybeListZipper
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:664:5 in 
course-0.1.4-inplace:Course.ListZipper
+      IsZ:                                                                  
           FAIL
+        Exception: todo: Course.ListZipper (<<=)#instance 
MaybeListZipper
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:664:5 in 
course-0.1.4-inplace:Course.ListZipper
+    Comonad
+      copure:                                                                  
        FAIL
+        Exception: todo: Course.ListZipper copure#instance 
ListZipper
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:673:5 in 
course-0.1.4-inplace:Course.ListZipper
+    Traversable
+      All Full:                                                                
        FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.ListZipper traverse#instance ListZipper
+          CallStack (from HasCallStack):
+            error, called at src/Course/ListZipper.hs:686:5 in 
course-0.1.4-inplace:Course.ListZipper
+        [] >0< []
+        Use --quickcheck-replay=575918 to reproduce.
+      One Empty:                                                            
           FAIL
+        Exception: todo: Course.ListZipper traverse#instance 
ListZipper
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:686:5 in 
course-0.1.4-inplace:Course.ListZipper
+    Traversable (MaybeListZipper)
+      IsNotZ:                                                                  
        FAIL
+        Exception: todo: Course.ListZipper traverse#instance 
MaybeListZipper
+        CallStack (from HasCallStack):
+          error, called at src/Course/ListZipper.hs:699:5 in 
course-0.1.4-inplace:Course.ListZipper
+      IsZ Full:                                                             
           FAIL
+        *** Failed! (after 1 test):
+        Exception:
+          todo: Course.ListZipper traverse#instance MaybeListZipper
+          CallStack (from HasCallStack):
+            error, called at src/Course/ListZipper.hs:699:5 in 
course-0.1.4-inplace:Course.ListZipper
+        [] >0< []
+        Use --quickcheck-replay=903857 to reproduce.
+  Parser
+    constantParserTest
+      can return error result:                                                 
        OK
+      can return ParseResult:                                               
           OK
+    characterTest
+      parses single character from non-empty string:                           
        FAIL
+        Exception: todo: Course.Parser#character
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:123:3 in 
course-0.1.4-inplace:Course.Parser
+      parsing empty string is an error:                                     
           FAIL
+        Exception: todo: Course.Parser#character
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:123:3 in 
course-0.1.4-inplace:Course.Parser
+    functorTest
+      toUpper <$>:                                                             
        FAIL
+        Exception: todo: Course.Parser (<$>)#instance Parser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:136:6 in 
course-0.1.4-inplace:Course.Parser
+    valueParserTest
+      succeeds with given value:                                               
        FAIL
+        Exception: todo: Course.Parser#valueParser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:146:3 in 
course-0.1.4-inplace:Course.Parser
+    alternativeParserTest
+      first fails, second succeeds with no input:                              
        FAIL
+        Exception: todo: Course.Parser#(|||)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:170:3 in 
course-0.1.4-inplace:Course.Parser
+      first always fails, second succeeds with no input:                    
           FAIL
+        Exception: todo: Course.Parser#(|||)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:170:3 in 
course-0.1.4-inplace:Course.Parser
+      first always fails, second succeeds with input:                       
           FAIL
+        Exception: todo: Course.Parser#(|||)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:170:3 in 
course-0.1.4-inplace:Course.Parser
+      takes first parse result when it succeeds:                            
           FAIL
+        Exception: todo: Course.Parser#(|||)
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:170:3 in 
course-0.1.4-inplace:Course.Parser
+    parserMonadInstanceTest
+      first parse fails:                                                       
        FAIL
+        Exception: todo: Course.Parser (=<<)#instance Parser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:202:5 in 
course-0.1.4-inplace:Course.Parser
+      second parse fails:                                                   
           FAIL
+        Exception: todo: Course.Parser (=<<)#instance Parser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:202:5 in 
course-0.1.4-inplace:Course.Parser
+      bind to valueParser:                                                  
           FAIL
+        Exception: todo: Course.Parser (=<<)#instance Parser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:202:5 in 
course-0.1.4-inplace:Course.Parser
+      bind to valueParser with no more input:                               
           FAIL
+        Exception: todo: Course.Parser (=<<)#instance Parser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:202:5 in 
course-0.1.4-inplace:Course.Parser
+      bind to character parser with remaining input:                        
           FAIL
+        Exception: todo: Course.Parser (=<<)#instance Parser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:202:5 in 
course-0.1.4-inplace:Course.Parser
+    parserApplicativeInstanceTest
+      pure:                                                                    
        FAIL
+        Exception: todo: Course.Parser#valueParser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:146:3 in 
course-0.1.4-inplace:Course.Parser
+      pure an Optional value:                                               
           FAIL
+        Exception: todo: Course.Parser#valueParser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:146:3 in 
course-0.1.4-inplace:Course.Parser
+      pure toUpper <*>:                                                     
           FAIL
+        Exception: todo: Course.Parser (<*>)#instance Parser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:217:5 in 
course-0.1.4-inplace:Course.Parser
+      pure show <*>:                                                        
           FAIL
+        Exception: todo: Course.Parser (<*>)#instance Parser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:217:5 in 
course-0.1.4-inplace:Course.Parser
+    satisfyTest
+      when character satisfies predicate:                                      
        FAIL
+        Exception: todo: Course.Parser#satisfy
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:236:3 in 
course-0.1.4-inplace:Course.Parser
+      is error when preidcate not satisfied:                                
           FAIL
+        Exception: todo: Course.Parser#satisfy
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:236:3 in 
course-0.1.4-inplace:Course.Parser
+    digitTest
+      is error when input empty:                                               
        FAIL
+        Exception: todo: Course.Parser#digit
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:260:3 in 
course-0.1.4-inplace:Course.Parser
+      is error when character not digit:                                    
           FAIL
+        Exception: todo: Course.Parser#digit
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:260:3 in 
course-0.1.4-inplace:Course.Parser
+      succeeds when character is a digit  :                                 
           FAIL
+        Exception: todo: Course.Parser#digit
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:260:3 in 
course-0.1.4-inplace:Course.Parser
+    spaceTest
+      fails when input empty:                                                  
        FAIL
+        Exception: todo: Course.Parser#space
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:273:3 in 
course-0.1.4-inplace:Course.Parser
+      fails when character not space:                                       
           FAIL
+        Exception: todo: Course.Parser#space
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:273:3 in 
course-0.1.4-inplace:Course.Parser
+      succeeds when first character is a space:                             
           FAIL
+        Exception: todo: Course.Parser#space
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:273:3 in 
course-0.1.4-inplace:Course.Parser
+    listTest
+      succeeds on empty input:                                                 
        FAIL
+        Exception: todo: Course.Parser#list
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:300:3 in 
course-0.1.4-inplace:Course.Parser
+      parses for as long as characters match:                               
           FAIL
+        Exception: todo: Course.Parser#list
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:300:3 in 
course-0.1.4-inplace:Course.Parser
+      parses empty value when no matching characters:                       
           FAIL
+        Exception: todo: Course.Parser#list
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:300:3 in 
course-0.1.4-inplace:Course.Parser
+      parses entire input if matches:                                       
           FAIL
+        Exception: todo: Course.Parser#list
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:300:3 in 
course-0.1.4-inplace:Course.Parser
+      parses for as long as characters match:                               
           FAIL
+        Exception: todo: Course.Parser#list
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:300:3 in 
course-0.1.4-inplace:Course.Parser
+      succeeds on empty input with value parser:                            
           FAIL
+        Exception: todo: Course.Parser#list
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:300:3 in 
course-0.1.4-inplace:Course.Parser
+    list1Test
+      succeeds when at least one character matches:                            
        FAIL
+        Exception: todo: Course.Parser#list1
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:319:3 in 
course-0.1.4-inplace:Course.Parser
+      succeeds when at least one character matches:                         
           FAIL
+        Exception: todo: Course.Parser#list1
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:319:3 in 
course-0.1.4-inplace:Course.Parser
+      no matching chars fails:                                              
           FAIL
+        Exception: todo: Course.Parser#list1
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:319:3 in 
course-0.1.4-inplace:Course.Parser
+    spaces1Test
+      fails on empty string:                                                   
        FAIL
+        Exception: todo: Course.Parser#spaces1
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:332:3 in 
course-0.1.4-inplace:Course.Parser
+      consumes single space:                                                
           FAIL
+        Exception: todo: Course.Parser#spaces1
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:332:3 in 
course-0.1.4-inplace:Course.Parser
+      consumes multiple spaces:                                             
           FAIL
+        Exception: todo: Course.Parser#spaces1
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:332:3 in 
course-0.1.4-inplace:Course.Parser
+    lowerTest
+      fails on empty string:                                                   
        FAIL
+        Exception: todo: Course.Parser#lower
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:344:3 in 
course-0.1.4-inplace:Course.Parser
+      fails if character is not lowercase:                                  
           FAIL
+        Exception: todo: Course.Parser#lower
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:344:3 in 
course-0.1.4-inplace:Course.Parser
+      produces lowercase character:                                         
           FAIL
+        Exception: todo: Course.Parser#lower
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:344:3 in 
course-0.1.4-inplace:Course.Parser
+    upperTest
+      fails on empty string:                                                   
        FAIL
+        Exception: todo: Course.Parser#upper
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:356:3 in 
course-0.1.4-inplace:Course.Parser
+      fails if character is not uppercase:                                  
           FAIL
+        Exception: todo: Course.Parser#upper
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:356:3 in 
course-0.1.4-inplace:Course.Parser
+      produces uppercase character:                                         
           FAIL
+        Exception: todo: Course.Parser#upper
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:356:3 in 
course-0.1.4-inplace:Course.Parser
+    alphaTest
+      fails on empty string:                                                   
        FAIL
+        Exception: todo: Course.Parser#alpha
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:368:3 in 
course-0.1.4-inplace:Course.Parser
+      fails if character is not alpha:                                      
           FAIL
+        Exception: todo: Course.Parser#alpha
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:368:3 in 
course-0.1.4-inplace:Course.Parser
+      produces alpha character:                                             
           FAIL
+        Exception: todo: Course.Parser#upper
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:356:3 in 
course-0.1.4-inplace:Course.Parser
+    sequenceParserTest
+      fails on first failing parser:                                           
        FAIL
+        Exception: todo: Course.Parser#sequenceParser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:385:3 in 
course-0.1.4-inplace:Course.Parser
+      sequences list of successful parsers:                                 
           FAIL
+        Exception: todo: Course.Parser#sequenceParser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:385:3 in 
course-0.1.4-inplace:Course.Parser
+    thisManyTest
+      fails when not enough matches:                                           
        FAIL
+        Exception: todo: Course.Parser#thisMany
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:402:3 in 
course-0.1.4-inplace:Course.Parser
+      produces n values when matched:                                       
           FAIL
+        Exception: todo: Course.Parser#thisMany
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:402:3 in 
course-0.1.4-inplace:Course.Parser
+    ageParserTest (done for you)
+      fails on invalid age (all letters):                                      
        FAIL
+        Exception: todo: Course.Parser (=<<)#instance Parser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:202:5 in 
course-0.1.4-inplace:Course.Parser
+      fails on invalid age (leading '-'):                                   
           FAIL
+        Exception: todo: Course.Parser (=<<)#instance Parser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:202:5 in 
course-0.1.4-inplace:Course.Parser
+      parses valid age:                                                     
           FAIL
+        Exception: todo: Course.Parser (=<<)#instance Parser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:202:5 in 
course-0.1.4-inplace:Course.Parser
+    firstNameParserTest
+      fails on first name that doesn't start with a capital:                   
        FAIL
+        Exception: todo: Course.Parser#firstNameParser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:435:3 in 
course-0.1.4-inplace:Course.Parser
+      parses valid first name:                                              
           FAIL
+        Exception: todo: Course.Parser#firstNameParser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:435:3 in 
course-0.1.4-inplace:Course.Parser
+    surnameParserTest
+      fails on short surname:                                                  
        FAIL
+        Exception: todo: Course.Parser#surnameParser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:457:3 in 
course-0.1.4-inplace:Course.Parser
+      fails on short surname starting with a lower case letter:             
           FAIL
+        Exception: todo: Course.Parser#surnameParser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:457:3 in 
course-0.1.4-inplace:Course.Parser
+      parses shortest valid surname:                                        
           FAIL
+        Exception: todo: Course.Parser#surnameParser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:457:3 in 
course-0.1.4-inplace:Course.Parser
+      parses long surname:                                                  
           FAIL
+        Exception: todo: Course.Parser#surnameParser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:457:3 in 
course-0.1.4-inplace:Course.Parser
+    smokerParserTest
+      fails on non y/n value:                                                  
        FAIL
+        Exception: todo: Course.Parser#smokerParser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:476:3 in 
course-0.1.4-inplace:Course.Parser
+      parses y, leaving remaining input:                                    
           FAIL
+        Exception: todo: Course.Parser#smokerParser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:476:3 in 
course-0.1.4-inplace:Course.Parser
+      parses n, leaving remaining input:                                    
           FAIL
+        Exception: todo: Course.Parser#smokerParser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:476:3 in 
course-0.1.4-inplace:Course.Parser
+    phoneBodyParserTest
+      produces empty list when no characters match:                            
        FAIL
+        Exception: todo: Course.Parser#phoneBodyParser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:498:3 in 
course-0.1.4-inplace:Course.Parser
+      parses valid phone body value:                                        
           FAIL
+        Exception: todo: Course.Parser#phoneBodyParser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:498:3 in 
course-0.1.4-inplace:Course.Parser
+      parses up to first letter:                                            
           FAIL
+        Exception: todo: Course.Parser#phoneBodyParser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:498:3 in 
course-0.1.4-inplace:Course.Parser
+    phoneParserTest
+      fails without trailing '#':                                              
        FAIL
+        Exception: todo: Course.Parser#phoneParser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:520:3 in 
course-0.1.4-inplace:Course.Parser
+      fails when input starts with a letter:                                
           FAIL
+        Exception: todo: Course.Parser#phoneParser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:520:3 in 
course-0.1.4-inplace:Course.Parser
+      produces valid phone number:                                          
           FAIL
+        Exception: todo: Course.Parser#phoneParser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:520:3 in 
course-0.1.4-inplace:Course.Parser
+      produces a valid phone number with remaining input:                   
           FAIL
+        Exception: todo: Course.Parser#phoneParser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:520:3 in 
course-0.1.4-inplace:Course.Parser
+    personParserTest
+      fails on empty string:                                                   
        FAIL
+        Exception: todo: Course.Parser#personParser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:578:3 in 
course-0.1.4-inplace:Course.Parser
+      fails on invalid age:                                                 
           FAIL
+        Exception: todo: Course.Parser#personParser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:578:3 in 
course-0.1.4-inplace:Course.Parser
+      fails on first name that doesn't start with capital:                  
           FAIL
+        Exception: todo: Course.Parser#personParser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:578:3 in 
course-0.1.4-inplace:Course.Parser
+      fails on surname that is too short:                                   
           FAIL
+        Exception: todo: Course.Parser#personParser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:578:3 in 
course-0.1.4-inplace:Course.Parser
+      fails on surname that doesn't start with a capital letter:            
           FAIL
+        Exception: todo: Course.Parser#personParser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:578:3 in 
course-0.1.4-inplace:Course.Parser
+      fails on invalid smoker value 'x':                                    
           FAIL
+        Exception: todo: Course.Parser#personParser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:578:3 in 
course-0.1.4-inplace:Course.Parser
+      fails on phone number containing an 'x':                              
           FAIL
+        Exception: todo: Course.Parser#personParser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:578:3 in 
course-0.1.4-inplace:Course.Parser
+      fails on phone number starting with '-':                              
           FAIL
+        Exception: todo: Course.Parser#personParser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:578:3 in 
course-0.1.4-inplace:Course.Parser
+      fails on phone number without a trailing '#':                         
           FAIL
+        Exception: todo: Course.Parser#personParser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:578:3 in 
course-0.1.4-inplace:Course.Parser
+      produces person for valid input:                                      
           FAIL
+        Exception: todo: Course.Parser#personParser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:578:3 in 
course-0.1.4-inplace:Course.Parser
+      produces person for valid input and keeps remaining input:            
           FAIL
+        Exception: todo: Course.Parser#personParser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:578:3 in 
course-0.1.4-inplace:Course.Parser
+      produces person for valid input containing extra whitespace:          
           FAIL
+        Exception: todo: Course.Parser#personParser
+        CallStack (from HasCallStack):
+          error, called at src/Course/Parser.hs:578:3 in 
course-0.1.4-inplace:Course.Parser
+  MoreParser
+    spacesTest
+      can parse zero spaces:                                                   
        FAIL
+        Exception: todo: Course.MoreParser#spaces
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:44:3 in 
course-0.1.4-inplace:Course.MoreParser
+      can parse single space:                                               
           FAIL
+        Exception: todo: Course.MoreParser#spaces
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:44:3 in 
course-0.1.4-inplace:Course.MoreParser
+      can parse multiple spaces:                                            
           FAIL
+        Exception: todo: Course.MoreParser#spaces
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:44:3 in 
course-0.1.4-inplace:Course.MoreParser
+    tokTest
+      can parse input without spaces:                                          
        FAIL
+        Exception: todo: Course.MoreParser#tok
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:60:3 in 
course-0.1.4-inplace:Course.MoreParser
+      can parse single space:                                               
           FAIL
+        Exception: todo: Course.MoreParser#tok
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:60:3 in 
course-0.1.4-inplace:Course.MoreParser
+      can parse multiple spaces:                                            
           FAIL
+        Exception: todo: Course.MoreParser#tok
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:60:3 in 
course-0.1.4-inplace:Course.MoreParser
+    charTokTest
+      fails when character does not match:                                     
        FAIL
+        Exception: todo: Course.MoreParser#charTok
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:75:3 in 
course-0.1.4-inplace:Course.MoreParser
+      parses matching character:                                            
           FAIL
+        Exception: todo: Course.MoreParser#charTok
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:75:3 in 
course-0.1.4-inplace:Course.MoreParser
+      parses matching character, dropping space:                            
           FAIL
+        Exception: todo: Course.MoreParser#charTok
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:75:3 in 
course-0.1.4-inplace:Course.MoreParser
+      parses matching character, dropping spaces:                           
           FAIL
+        Exception: todo: Course.MoreParser#charTok
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:75:3 in 
course-0.1.4-inplace:Course.MoreParser
+    commaTokTest
+      fails when character is not a comma:                                     
        FAIL
+        Exception: todo: Course.MoreParser#commaTok
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:89:3 in 
course-0.1.4-inplace:Course.MoreParser
+      parses leading comma:                                                 
           FAIL
+        Exception: todo: Course.MoreParser#commaTok
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:89:3 in 
course-0.1.4-inplace:Course.MoreParser
+      parses leading comma, dropping space:                                 
           FAIL
+        Exception: todo: Course.MoreParser#commaTok
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:89:3 in 
course-0.1.4-inplace:Course.MoreParser
+      parses leading comma, dropping multiple spaces:                       
           FAIL
+        Exception: todo: Course.MoreParser#commaTok
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:89:3 in 
course-0.1.4-inplace:Course.MoreParser
+    quoteTest
+      fails when character is not a single or double quote:                    
        FAIL
+        Exception: todo: Course.MoreParser#quote
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:106:3 in 
course-0.1.4-inplace:Course.MoreParser
+      parses single quote:                                                  
           FAIL
+        Exception: todo: Course.MoreParser#quote
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:106:3 in 
course-0.1.4-inplace:Course.MoreParser
+      parses double quote:                                                  
           FAIL
+        Exception: todo: Course.MoreParser#quote
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:106:3 in 
course-0.1.4-inplace:Course.MoreParser
+    stringTest
+      fails when string is not matched:                                        
        FAIL
+        Exception: todo: Course.MoreParser#string
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:121:3 in 
course-0.1.4-inplace:Course.MoreParser
+      parses matching string, leaves remaining input:                       
           FAIL
+        Exception: todo: Course.MoreParser#string
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:121:3 in 
course-0.1.4-inplace:Course.MoreParser
+      parses matching string:                                               
           FAIL
+        Exception: todo: Course.MoreParser#string
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:121:3 in 
course-0.1.4-inplace:Course.MoreParser
+    stringTokTest
+      fails when string is not matched:                                        
        FAIL
+        Exception: todo: Course.MoreParser#stringTok
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:136:3 in 
course-0.1.4-inplace:Course.MoreParser
+      parses matching string followed by zero spaces:                       
           FAIL
+        Exception: todo: Course.MoreParser#stringTok
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:136:3 in 
course-0.1.4-inplace:Course.MoreParser
+      parses matching string followed by many spaces:                       
           FAIL
+        Exception: todo: Course.MoreParser#stringTok
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:136:3 in 
course-0.1.4-inplace:Course.MoreParser
+    optionTest
+      produces parsed value when parser succeeds:                              
        FAIL
+        Exception: todo: Course.MoreParser#option
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:152:3 in 
course-0.1.4-inplace:Course.MoreParser
+      produces given value when parser fails:                               
           FAIL
+        Exception: todo: Course.MoreParser#option
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:152:3 in 
course-0.1.4-inplace:Course.MoreParser
+    digits1Test
+      fails when no digits at start of input:                                  
        FAIL
+        Exception: todo: Course.MoreParser#digits1
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:166:3 in 
course-0.1.4-inplace:Course.MoreParser
+      succeeds on digits:                                                   
           FAIL
+        Exception: todo: Course.MoreParser#digits1
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:166:3 in 
course-0.1.4-inplace:Course.MoreParser
+      succeeds on digits, leaves remaining input:                           
           FAIL
+        Exception: todo: Course.MoreParser#digits1
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:166:3 in 
course-0.1.4-inplace:Course.MoreParser
+    oneofTest
+      fails when given character not in string:                                
        FAIL
+        Exception: todo: Course.MoreParser#oneof
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:181:3 in 
course-0.1.4-inplace:Course.MoreParser
+      given character prefixes input:                                       
           FAIL
+        Exception: todo: Course.MoreParser#oneof
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:181:3 in 
course-0.1.4-inplace:Course.MoreParser
+    noneofTest
+      fails when one of given characters prefixes input:                       
        FAIL
+        Exception: todo: Course.MoreParser#noneof
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:196:3 in 
course-0.1.4-inplace:Course.MoreParser
+      succeeds when none of the given characters in input:                  
           FAIL
+        Exception: todo: Course.MoreParser#noneof
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:196:3 in 
course-0.1.4-inplace:Course.MoreParser
+      succeeds when none of the given characters prefixes input:            
           FAIL
+        Exception: todo: Course.MoreParser#noneof
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:196:3 in 
course-0.1.4-inplace:Course.MoreParser
+    betweenTest
+      fails when opening parse fails:                                          
        FAIL
+        Exception: todo: Course.MoreParser#between
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:220:3 in 
course-0.1.4-inplace:Course.MoreParser
+      fails when surrounded parser fails:                                   
           FAIL
+        Exception: todo: Course.MoreParser#between
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:220:3 in 
course-0.1.4-inplace:Course.MoreParser
+      fails when closing parse fails:                                       
           FAIL
+        Exception: todo: Course.MoreParser#between
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:220:3 in 
course-0.1.4-inplace:Course.MoreParser
+      succeeds: character surrounded by []':                                
           FAIL
+        Exception: todo: Course.MoreParser#between
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:220:3 in 
course-0.1.4-inplace:Course.MoreParser
+      succeeds: digits surrounded by []:                                    
           FAIL
+        Exception: todo: Course.MoreParser#between
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:220:3 in 
course-0.1.4-inplace:Course.MoreParser
+    betweenCharTokTest
+      fails when opening character not present:                                
        FAIL
+        Exception: todo: Course.MoreParser#betweenCharTok
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:243:3 in 
course-0.1.4-inplace:Course.MoreParser
+      fails when closing character not present:                             
           FAIL
+        Exception: todo: Course.MoreParser#betweenCharTok
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:243:3 in 
course-0.1.4-inplace:Course.MoreParser
+      fails when surrounded parser fails:                                   
           FAIL
+        Exception: todo: Course.MoreParser#betweenCharTok
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:243:3 in 
course-0.1.4-inplace:Course.MoreParser
+      succeeds: character:                                                  
           FAIL
+        Exception: todo: Course.MoreParser#betweenCharTok
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:243:3 in 
course-0.1.4-inplace:Course.MoreParser
+      succeeds: digits1:                                                    
           FAIL
+        Exception: todo: Course.MoreParser#betweenCharTok
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:243:3 in 
course-0.1.4-inplace:Course.MoreParser
+    hexTest
+      fails on invalid hex string --- too short:                               
        FAIL
+        Exception: todo: Course.MoreParser#hex
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:263:3 in 
course-0.1.4-inplace:Course.MoreParser
+      fails on invalid hex string --- invalid char (x):                     
           FAIL
+        Exception: todo: Course.MoreParser#hex
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:263:3 in 
course-0.1.4-inplace:Course.MoreParser
+      succeeds on valid hex value:                                          
           FAIL
+        Exception: todo: Course.MoreParser#hex
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:263:3 in 
course-0.1.4-inplace:Course.MoreParser
+    hexuTest
+      fails when no u at start:                                                
        FAIL
+        Exception: todo: Course.MoreParser#hexu
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:286:3 in 
course-0.1.4-inplace:Course.MoreParser
+      fails when not 4 hex digits after u:                                  
           FAIL
+        Exception: todo: Course.MoreParser#hexu
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:286:3 in 
course-0.1.4-inplace:Course.MoreParser
+      fails on invalid hex digit:                                           
           FAIL
+        Exception: todo: Course.MoreParser#hexu
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:286:3 in 
course-0.1.4-inplace:Course.MoreParser
+      succeeds on valid input --- u0010:                                    
           FAIL
+        Exception: todo: Course.MoreParser#hexu
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:286:3 in 
course-0.1.4-inplace:Course.MoreParser
+      succeeds on valid input --- u0a1f:                                    
           FAIL
+        Exception: todo: Course.MoreParser#hexu
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:286:3 in 
course-0.1.4-inplace:Course.MoreParser
+    sepby1Test
+      fails when first parser fails:                                           
        FAIL
+        Exception: todo: Course.MoreParser#sepby1
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:309:3 in 
course-0.1.4-inplace:Course.MoreParser
+      parses single character not followed by seperator:                    
           FAIL
+        Exception: todo: Course.MoreParser#sepby1
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:309:3 in 
course-0.1.4-inplace:Course.MoreParser
+      parses multiple matches with separators:                              
           FAIL
+        Exception: todo: Course.MoreParser#sepby1
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:309:3 in 
course-0.1.4-inplace:Course.MoreParser
+      succeeds until two separators:                                        
           FAIL
+        Exception: todo: Course.MoreParser#sepby1
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:309:3 in 
course-0.1.4-inplace:Course.MoreParser
+    sepbyTest
+      succeeds on empty string:                                                
        FAIL
+        Exception: todo: Course.MoreParser#sepby
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:332:3 in 
course-0.1.4-inplace:Course.MoreParser
+      succeeds on single match without seperator:                           
           FAIL
+        Exception: todo: Course.MoreParser#sepby
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:332:3 in 
course-0.1.4-inplace:Course.MoreParser
+      succeeds on multiple matches with seperators:                         
           FAIL
+        Exception: todo: Course.MoreParser#sepby
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:332:3 in 
course-0.1.4-inplace:Course.MoreParser
+      succeeds until two separators:                                        
           FAIL
+        Exception: todo: Course.MoreParser#sepby
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:332:3 in 
course-0.1.4-inplace:Course.MoreParser
+    eofTest
+      fails when still input left:                                             
        FAIL
+        Exception: todo: Course.MoreParser#eof
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:344:3 in 
course-0.1.4-inplace:Course.MoreParser
+      succeeds when no input left:                                          
           FAIL
+        Exception: todo: Course.MoreParser#eof
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:344:3 in 
course-0.1.4-inplace:Course.MoreParser
+    satisfyAllTest
+      fails when a predicate fails:                                            
        FAIL
+        Exception: todo: Course.MoreParser#satisfyAll
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:368:3 in 
course-0.1.4-inplace:Course.MoreParser
+      fails when no predicates satisfied (empty input):                     
           FAIL
+        Exception: todo: Course.MoreParser#satisfyAll
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:368:3 in 
course-0.1.4-inplace:Course.MoreParser
+      fails when no predicates satisfied:                                   
           FAIL
+        Exception: todo: Course.MoreParser#satisfyAll
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:368:3 in 
course-0.1.4-inplace:Course.MoreParser
+      succeeds when all predicates satisfied: ABC:                          
           FAIL
+        Exception: todo: Course.MoreParser#satisfyAll
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:368:3 in 
course-0.1.4-inplace:Course.MoreParser
+      succeeds when all predicates satisfied: ABc:                          
           FAIL
+        Exception: todo: Course.MoreParser#satisfyAll
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:368:3 in 
course-0.1.4-inplace:Course.MoreParser
+    satisfyAnyTest
+      fails when no predicates satisfied:                                      
        FAIL
+        Exception: todo: Course.MoreParser#satisfyAny
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:389:3 in 
course-0.1.4-inplace:Course.MoreParser
+      fails when no predicates satisfied (empty input):                     
           FAIL
+        Exception: todo: Course.MoreParser#satisfyAny
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:389:3 in 
course-0.1.4-inplace:Course.MoreParser
+      succeeds when all predicates satisfied:                               
           FAIL
+        Exception: todo: Course.MoreParser#satisfyAny
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:389:3 in 
course-0.1.4-inplace:Course.MoreParser
+      succeeds when one of two predicates satisfied:                        
           FAIL
+        Exception: todo: Course.MoreParser#satisfyAny
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:389:3 in 
course-0.1.4-inplace:Course.MoreParser
+    betweenSepbyCommaTest
+      fails when opening char missing:                                         
        FAIL
+        Exception: todo: Course.MoreParser#betweenSepbyComma
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:427:3 in 
course-0.1.4-inplace:Course.MoreParser
+      fails when closing char missing:                                      
           FAIL
+        Exception: todo: Course.MoreParser#betweenSepbyComma
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:427:3 in 
course-0.1.4-inplace:Course.MoreParser
+      fails when input between seperators doesn't match (multiple matches): 
           FAIL
+        Exception: todo: Course.MoreParser#betweenSepbyComma
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:427:3 in 
course-0.1.4-inplace:Course.MoreParser
+      fails when input between seperators doesn't match:                    
           FAIL
+        Exception: todo: Course.MoreParser#betweenSepbyComma
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:427:3 in 
course-0.1.4-inplace:Course.MoreParser
+      succeeds --- one match:                                               
           FAIL
+        Exception: todo: Course.MoreParser#betweenSepbyComma
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:427:3 in 
course-0.1.4-inplace:Course.MoreParser
+      succeeds --- nothing between surrounds:                               
           FAIL
+        Exception: todo: Course.MoreParser#betweenSepbyComma
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:427:3 in 
course-0.1.4-inplace:Course.MoreParser
+      succeeds --- 3 matches:                                               
           FAIL
+        Exception: todo: Course.MoreParser#betweenSepbyComma
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:427:3 in 
course-0.1.4-inplace:Course.MoreParser
+      succeeds --- 3 padded matches:                                        
           FAIL
+        Exception: todo: Course.MoreParser#betweenSepbyComma
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:427:3 in 
course-0.1.4-inplace:Course.MoreParser
+      succeeds --- digits1:                                                 
           FAIL
+        Exception: todo: Course.MoreParser#betweenSepbyComma
+        CallStack (from HasCallStack):
+          error, called at src/Course/MoreParser.hs:427:3 in 
course-0.1.4-inplace:Course.MoreParser
+  JsonParser
+    jsonString
+      parse whole ASCII input:                                                 
        FAIL
+        Exception: todo: Course.JsonParser#jsonString
+        CallStack (from HasCallStack):
+          error, called at src/Course/JsonParser.hs:113:3 in 
course-0.1.4-inplace:Course.JsonParser
+      parse only the first string of input:                                 
           FAIL
+        Exception: todo: Course.JsonParser#jsonString
+        CallStack (from HasCallStack):
+          error, called at src/Course/JsonParser.hs:113:3 in 
course-0.1.4-inplace:Course.JsonParser
+      parse back slash (\):                                                 
           FAIL
+        Exception: todo: Course.JsonParser#jsonString
+        CallStack (from HasCallStack):
+          error, called at src/Course/JsonParser.hs:113:3 in 
course-0.1.4-inplace:Course.JsonParser
+      parse unicode (\u00abc):                                              
           FAIL
+        Exception: todo: Course.JsonParser#jsonString
+        CallStack (from HasCallStack):
+          error, called at src/Course/JsonParser.hs:113:3 in 
course-0.1.4-inplace:Course.JsonParser
+      parse unicode (\u00ff):                                               
           FAIL
+        Exception: todo: Course.JsonParser#jsonString
+        CallStack (from HasCallStack):
+          error, called at src/Course/JsonParser.hs:113:3 in 
course-0.1.4-inplace:Course.JsonParser
+      parse unicode (\u00fa):                                               
           FAIL
+        Exception: todo: Course.JsonParser#jsonString
+        CallStack (from HasCallStack):
+          error, called at src/Course/JsonParser.hs:113:3 in 
course-0.1.4-inplace:Course.JsonParser
+      parsing string without quotes is an error:                            
           FAIL
+        Exception: todo: Course.JsonParser#jsonString
+        CallStack (from HasCallStack):
+          error, called at src/Course/JsonParser.hs:113:3 in 
course-0.1.4-inplace:Course.JsonParser
+      parsing string containing \a is an error - \a isn't a special 
character:         FAIL
+        Exception: todo: Course.JsonParser#jsonString
+        CallStack (from HasCallStack):
+          error, called at src/Course/JsonParser.hs:113:3 in 
course-0.1.4-inplace:Course.JsonParser
+    jsonNumber
+      positive whole:                                                          
        FAIL
+        Exception: todo: Course.JsonParser#jsonNumber
+        CallStack (from HasCallStack):
+          error, called at src/Course/JsonParser.hs:142:3 in 
course-0.1.4-inplace:Course.JsonParser
+      negative whole:                                                       
           FAIL
+        Exception: todo: Course.JsonParser#jsonNumber
+        CallStack (from HasCallStack):
+          error, called at src/Course/JsonParser.hs:142:3 in 
course-0.1.4-inplace:Course.JsonParser
+      positive decimal:                                                     
           FAIL
+        Exception: todo: Course.JsonParser#jsonNumber
+        CallStack (from HasCallStack):
+          error, called at src/Course/JsonParser.hs:142:3 in 
course-0.1.4-inplace:Course.JsonParser
+      negative whole (2):                                                   
           FAIL
+        Exception: todo: Course.JsonParser#jsonNumber
+        CallStack (from HasCallStack):
+          error, called at src/Course/JsonParser.hs:142:3 in 
course-0.1.4-inplace:Course.JsonParser
+      negative decimal:                                                     
           FAIL
+        Exception: todo: Course.JsonParser#jsonNumber
+        CallStack (from HasCallStack):
+          error, called at src/Course/JsonParser.hs:142:3 in 
course-0.1.4-inplace:Course.JsonParser
+      negative sign on its own is error:                                    
           FAIL
+        Exception: todo: Course.JsonParser#jsonNumber
+        CallStack (from HasCallStack):
+          error, called at src/Course/JsonParser.hs:142:3 in 
course-0.1.4-inplace:Course.JsonParser
+      alphabetic characters is error:                                       
           FAIL
+        Exception: todo: Course.JsonParser#jsonNumber
+        CallStack (from HasCallStack):
+          error, called at src/Course/JsonParser.hs:142:3 in 
course-0.1.4-inplace:Course.JsonParser
+    jsonTrue
+      parses true:                                                             
        FAIL
+        Exception: todo: Course.JsonParser#jsonTrue
+        CallStack (from HasCallStack):
+          error, called at src/Course/JsonParser.hs:156:3 in 
course-0.1.4-inplace:Course.JsonParser
+      TRUE (caps) is an error:                                              
           FAIL
+        Exception: todo: Course.JsonParser#jsonTrue
+        CallStack (from HasCallStack):
+          error, called at src/Course/JsonParser.hs:156:3 in 
course-0.1.4-inplace:Course.JsonParser
+    jsonFalse
+      parses false:                                                            
        FAIL
+        Exception: todo: Course.JsonParser#jsonFalse
+        CallStack (from HasCallStack):
+          error, called at src/Course/JsonParser.hs:170:3 in 
course-0.1.4-inplace:Course.JsonParser
+      FALSE (caps) is an error:                                             
           FAIL
+        Exception: todo: Course.JsonParser#jsonFalse
+        CallStack (from HasCallStack):
+          error, called at src/Course/JsonParser.hs:170:3 in 
course-0.1.4-inplace:Course.JsonParser
+    jsonNull
+      parses null:                                                             
        FAIL
+        Exception: todo: Course.JsonParser#jsonNull
+        CallStack (from HasCallStack):
+          error, called at src/Course/JsonParser.hs:184:3 in 
course-0.1.4-inplace:Course.JsonParser
+      NULL (caps) is an error:                                              
           FAIL
+        Exception: todo: Course.JsonParser#jsonNull
+        CallStack (from HasCallStack):
+          error, called at src/Course/JsonParser.hs:184:3 in 
course-0.1.4-inplace:Course.JsonParser
+    jsonArray
+      []:                                                                      
        FAIL
+        Exception: todo: Course.JsonParser#jsonArray
+        CallStack (from HasCallStack):
+          error, called at src/Course/JsonParser.hs:207:3 in 
course-0.1.4-inplace:Course.JsonParser
+      [true]:                                                               
           FAIL
+        Exception: todo: Course.JsonParser#jsonArray
+        CallStack (from HasCallStack):
+          error, called at src/Course/JsonParser.hs:207:3 in 
course-0.1.4-inplace:Course.JsonParser
+      [true, "abc"]:                                                        
           FAIL
+        Exception: todo: Course.JsonParser#jsonArray
+        CallStack (from HasCallStack):
+          error, called at src/Course/JsonParser.hs:207:3 in 
course-0.1.4-inplace:Course.JsonParser
+      [true, "abc", []]:                                                    
           FAIL
+        Exception: todo: Course.JsonParser#jsonArray
+        CallStack (from HasCallStack):
+          error, called at src/Course/JsonParser.hs:207:3 in 
course-0.1.4-inplace:Course.JsonParser
+      [true, "abc", [false]]:                                               
           FAIL
+        Exception: todo: Course.JsonParser#jsonArray
+        CallStack (from HasCallStack):
+          error, called at src/Course/JsonParser.hs:207:3 in 
course-0.1.4-inplace:Course.JsonParser
+    jsonObject
+      empty:                                                                   
        FAIL
+        Exception: todo: Course.JsonParser#jsonObject
+        CallStack (from HasCallStack):
+          error, called at src/Course/JsonParser.hs:227:3 in 
course-0.1.4-inplace:Course.JsonParser
+      one key:                                                              
           FAIL
+        Exception: todo: Course.JsonParser#jsonObject
+        CallStack (from HasCallStack):
+          error, called at src/Course/JsonParser.hs:227:3 in 
course-0.1.4-inplace:Course.JsonParser
+      two keys:                                                             
           FAIL
+        Exception: todo: Course.JsonParser#jsonObject
+        CallStack (from HasCallStack):
+          error, called at src/Course/JsonParser.hs:227:3 in 
course-0.1.4-inplace:Course.JsonParser
+      two keys and left over input:                                         
           FAIL
+        Exception: todo: Course.JsonParser#jsonObject
+        CallStack (from HasCallStack):
+          error, called at src/Course/JsonParser.hs:227:3 in 
course-0.1.4-inplace:Course.JsonParser
+    jsonValue
+      true:                                                                    
        FAIL
+        Exception: todo: Course.JsonParser#jsonValue
+        CallStack (from HasCallStack):
+          error, called at src/Course/JsonParser.hs:244:4 in 
course-0.1.4-inplace:Course.JsonParser
+      object:                                                               
           FAIL
+        Exception: todo: Course.JsonParser#jsonObject
+        CallStack (from HasCallStack):
+          error, called at src/Course/JsonParser.hs:227:3 in 
course-0.1.4-inplace:Course.JsonParser
+      nested object:                                                        
           FAIL
+        Exception: todo: Course.JsonParser#jsonObject
+        CallStack (from HasCallStack):
+          error, called at src/Course/JsonParser.hs:227:3 in 
course-0.1.4-inplace:Course.JsonParser
+  Cheque
+    dollars
+      empty:                                                                   
        FAIL
+        Exception: todo: Course.Cheque#dollars
+        CallStack (from HasCallStack):
+          error, called at src/Course/Cheque.hs:327:3 in 
course-0.1.4-inplace:Course.Cheque
+      dollars '1':                                                          
           FAIL
+        Exception: todo: Course.Cheque#dollars
+        CallStack (from HasCallStack):
+          error, called at src/Course/Cheque.hs:327:3 in 
course-0.1.4-inplace:Course.Cheque
+      dollars '0.1':                                                        
           FAIL
+        Exception: todo: Course.Cheque#dollars
+        CallStack (from HasCallStack):
+          error, called at src/Course/Cheque.hs:327:3 in 
course-0.1.4-inplace:Course.Cheque
+      dollars '1.':                                                         
           FAIL
+        Exception: todo: Course.Cheque#dollars
+        CallStack (from HasCallStack):
+          error, called at src/Course/Cheque.hs:327:3 in 
course-0.1.4-inplace:Course.Cheque
+      dollars '0.':                                                         
           FAIL
+        Exception: todo: Course.Cheque#dollars
+        CallStack (from HasCallStack):
+          error, called at src/Course/Cheque.hs:327:3 in 
course-0.1.4-inplace:Course.Cheque
+      dollars '0.0':                                                        
           FAIL
+        Exception: todo: Course.Cheque#dollars
+        CallStack (from HasCallStack):
+          error, called at src/Course/Cheque.hs:327:3 in 
course-0.1.4-inplace:Course.Cheque
+      dollars '.34':                                                        
           FAIL
+        Exception: todo: Course.Cheque#dollars
+        CallStack (from HasCallStack):
+          error, called at src/Course/Cheque.hs:327:3 in 
course-0.1.4-inplace:Course.Cheque
+      dollars '0.3456789':                                                  
           FAIL
+        Exception: todo: Course.Cheque#dollars
+        CallStack (from HasCallStack):
+          error, called at src/Course/Cheque.hs:327:3 in 
course-0.1.4-inplace:Course.Cheque
+      dollars '1.0':                                                        
           FAIL
+        Exception: todo: Course.Cheque#dollars
+        CallStack (from HasCallStack):
+          error, called at src/Course/Cheque.hs:327:3 in 
course-0.1.4-inplace:Course.Cheque
+      dollars '1.01':                                                       
           FAIL
+        Exception: todo: Course.Cheque#dollars
+        CallStack (from HasCallStack):
+          error, called at src/Course/Cheque.hs:327:3 in 
course-0.1.4-inplace:Course.Cheque
+      dollars 'a1a':                                                        
           FAIL
+        Exception: todo: Course.Cheque#dollars
+        CallStack (from HasCallStack):
+          error, called at src/Course/Cheque.hs:327:3 in 
course-0.1.4-inplace:Course.Cheque
+      dollars 'a1a.a0.7b':                                                  
           FAIL
+        Exception: todo: Course.Cheque#dollars
+        CallStack (from HasCallStack):
+          error, called at src/Course/Cheque.hs:327:3 in 
course-0.1.4-inplace:Course.Cheque
+      dollars '100':                                                        
           FAIL
+        Exception: todo: Course.Cheque#dollars
+        CallStack (from HasCallStack):
+          error, called at src/Course/Cheque.hs:327:3 in 
course-0.1.4-inplace:Course.Cheque
+      dollars '100.0':                                                      
           FAIL
+        Exception: todo: Course.Cheque#dollars
+        CallStack (from HasCallStack):
+          error, called at src/Course/Cheque.hs:327:3 in 
course-0.1.4-inplace:Course.Cheque
+      dollars '100.00':                                                     
           FAIL
+        Exception: todo: Course.Cheque#dollars
+        CallStack (from HasCallStack):
+          error, called at src/Course/Cheque.hs:327:3 in 
course-0.1.4-inplace:Course.Cheque
+      dollars '100.00000':                                                  
           FAIL
+        Exception: todo: Course.Cheque#dollars
+        CallStack (from HasCallStack):
+          error, called at src/Course/Cheque.hs:327:3 in 
course-0.1.4-inplace:Course.Cheque
+      dollars '1000456.13':                                                 
           FAIL
+        Exception: todo: Course.Cheque#dollars
+        CallStack (from HasCallStack):
+          error, called at src/Course/Cheque.hs:327:3 in 
course-0.1.4-inplace:Course.Cheque
+      dollars '1001456.13':                                                 
           FAIL
+        Exception: todo: Course.Cheque#dollars
+        CallStack (from HasCallStack):
+          error, called at src/Course/Cheque.hs:327:3 in 
course-0.1.4-inplace:Course.Cheque
+      dollars '16000000456.13':                                             
           FAIL
+        Exception: todo: Course.Cheque#dollars
+        CallStack (from HasCallStack):
+          error, called at src/Course/Cheque.hs:327:3 in 
course-0.1.4-inplace:Course.Cheque
+      dollars '100.45':                                                     
           FAIL
+        Exception: todo: Course.Cheque#dollars
+        CallStack (from HasCallStack):
+          error, called at src/Course/Cheque.hs:327:3 in 
course-0.1.4-inplace:Course.Cheque
+      dollars '100.07':                                                     
           FAIL
+        Exception: todo: Course.Cheque#dollars
+        CallStack (from HasCallStack):
+          error, called at src/Course/Cheque.hs:327:3 in 
course-0.1.4-inplace:Course.Cheque
+      dollars '9abc9def9ghi.jkl9mno':                                       
           FAIL
+        Exception: todo: Course.Cheque#dollars
+        CallStack (from HasCallStack):
+          error, called at src/Course/Cheque.hs:327:3 in 
course-0.1.4-inplace:Course.Cheque
+      dollars '12345.67':                                                   
           FAIL
+        Exception: todo: Course.Cheque#dollars
+        CallStack (from HasCallStack):
+          error, called at src/Course/Cheque.hs:327:3 in 
course-0.1.4-inplace:Course.Cheque
+      dollars 
'456789123456789012345678901234567890123456789012345678901234567890.12': 
FAIL
+        Exception: todo: Course.Cheque#dollars
+        CallStack (from HasCallStack):
+          error, called at src/Course/Cheque.hs:327:3 in 
course-0.1.4-inplace:Course.Cheque
+
+568 out of 591 tests failed (0.06s)
+
+Test suite tasty: FAIL
+Test suite logged to:
+/home/tseenshe/fp-course/dist-newstyle/build/x86_64-linux/ghc-8.4.4/course-0.1.4/t/tasty/noopt/test/course-0.1.4-tasty.log
+0 of 1 test suites (0 of 1 test cases) passed.
+cabal: Tests failed for test:tasty from course-0.1.4.
+



reply via email to

[Prev in Thread] Current Thread [Next in Thread]