diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,7 +3,25 @@
 `summoner` uses [PVP Versioning][1].
 The changelog is available [on GitHub][2].
 
-## 2.0.0.0 – Mar 28, 2019
+## 2.0.1.0 — May 21, 2020
+
+* [#443](https://github.com/kowainik/summoner/issues/443):
+  Support GHC-8.10.1 for `Summoner` project.
+* [#459](https://github.com/kowainik/summoner/issues/459):
+  Bump up `tomland` version to `1.3.0.0`.
+* [#460](https://github.com/kowainik/summoner/issues/460):
+  Bump up `relude` version to `0.7.0.0`.
+  Remove `Summoner.Template.Mempty` as `memptyIfFalse` is imported from
+  `Relude`.
+* [#455](https://github.com/kowainik/summoner/issues/455):
+  Allow `validation-selective` version `0.1.0.0`.
+* [#452](https://github.com/kowainik/summoner/issues/452):
+  Bump up `colourista` version to `0.1.0.0`. Remove the
+  `Summoner.Ansi` module.
+* __#TUI__ Bump up `brick` upper bound to allow `0.53`.
+* __#CLI__ Bump up `time` upper bound to allow `1.10`.
+
+## 2.0.0.0 – Mar 28, 2020
 
 * [#246](https://github.com/kowainik/summoner/issues/246):
   Put common fields into the `common-options` [common stanza](https://vrom911.github.io/blog/common-stanzas).
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -23,51 +23,59 @@
 
 ## Structure
 
-* [Demo](#demo-)
-    + [TUI demo](#tui-demo-)
-    + [CLI demo](#cli-demo-)
-    + [Examples](#examples-)
-* [Features](#features-)
-* [Get started](#get-started-)
-    + [Prerequisites](#prerequisites-)
-    + [Installation](#installation-)
-        + [Summon-TUI](#summon-tui-)
-          + [TUI: download binary](#tui-download-binary-)
-          + [TUI: Homebrew](#tui-homebrew-)
-          + [TUI: Ubuntu](#tui-ubuntu-)
-          + [TUI: from Hackage/Stackage](#tui-from-hackagestackage-)
-          + [TUI: from source](#tui-from-source-)
-        + [Summon-CLI](#summon-cli-)
-          + [CLI: download binary](#cli-download-binary-)
-          + [CLI: Homebrew](#cli-homebrew-)
-          + [CLI: Ubuntu](#cli-ubuntu-)
-          + [CLI: from Hackage/Stackage](#cli-from-hackagestackage-)
-          + [CLI: from source](#cli-from-source-)
-    + [Setup](#setup-)
-* [Usage](#usage-)
-    + [Command-line arguments](#command-line-arguments-)
-    + [File configuration](#file-configuration-)
-    + [TUI](#tui-)
-    + [CLI](#cli-)
-* [FAQ](#faq-)
-* [For Developers](#for-developers-)
-    + [Build](#build-)
-    + [Test](#test-)
-    + [Run](#run-)
-* [Acknowledgments](#acknowledgments-)
+* [Demo](#demo)
+    + [TUI demo](#tui-demo)
+    + [CLI demo](#cli-demo)
+    + [Examples](#examples)
+* [Features](#features)
+* [Get started](#get-started)
+    + [Prerequisites](#prerequisites)
+    + [Installation](#installation)
+        + [Summon-TUI](#summon-tui)
+          + [TUI: download binary](#tui-download-binary)
+          + [TUI: Homebrew](#tui-homebrew)
+          + [TUI: Ubuntu](#tui-ubuntu)
+          + [TUI: from Hackage/Stackage](#tui-from-hackagestackage)
+          + [TUI: from source](#tui-from-source)
+        + [Summon-CLI](#summon-cli)
+          + [CLI: download binary](#cli-download-binary)
+          + [CLI: Homebrew](#cli-homebrew)
+          + [CLI: Ubuntu](#cli-ubuntu)
+          + [CLI: from Hackage/Stackage](#cli-from-hackagestackage)
+          + [CLI: from source](#cli-from-source)
+    + [Setup](#setup)
+* [Usage](#usage)
+    + [Command-line arguments](#command-line-arguments)
+    + [File configuration](#file-configuration)
+    + [TUI](#tui)
+    + [CLI](#cli)
+* [FAQ](#faq)
+* [For Developers](#for-developers)
+    + [Build](#build)
+    + [Test](#test)
+    + [Run](#run)
+* [Acknowledgments](#acknowledgments)
 
-## Demo [↑](#structure)
+## Demo
 
-### TUI demo [↑](#structure)
+[[Back to the Table of Contents] ↑](#structure)
 
+### TUI demo
+
+[[Back to the Table of Contents] ↑](#structure)
+
 [![TUI demo](https://asciinema.org/a/314375.png)](https://asciinema.org/a/314375)
 
-### CLI demo [↑](#structure)
+### CLI demo
 
+[[Back to the Table of Contents] ↑](#structure)
+
 [![CLI demo](https://asciinema.org/a/314374.png)](https://asciinema.org/a/314374)
 
 ### Examples
 
+[[Back to the Table of Contents] ↑](#structure)
+
 You can also see complete examples in the following folder:
 
 * [`summon-cli/examples/`: Examples of scaffolded projects](https://github.com/kowainik/summoner/tree/master/summoner-cli/examples/)
@@ -85,16 +93,20 @@
   All batteries-included project which supports both build tools and
   shows every Summoner feature.
 
-## Features [↑](#structure)
+## Features
 
+[[Back to the Table of Contents] ↑](#structure)
+
 Summoner is a tool that combines predefined configurations, command-line arguments and a chosen interface.
 
 To fully understand the power in your hands with the help of Summoner, please read this section.
 
 Below you can see highlighted features in different categories.
 
-### Project [↑](#structure)
+### Project
 
+[[Back to the Table of Contents] ↑](#structure)
+
 Features related to the structure and content of the generated projects.
 
 + Support for Cabal and Stack build tools.
@@ -133,8 +145,10 @@
   -with-rtsopts=-N
   ```
 
-### GitHub [↑](#structure)
+### GitHub
 
+[[Back to the Table of Contents] ↑](#structure)
+
 + Initialisation of the git repository inside the project folder.
 + Initial commit creation.
 + Uploading the repository to GitHub.
@@ -144,8 +158,10 @@
 + Ability to include your custom GitHub meta files: `CONTRIBUTING.md`, `CODEOWNERS`, `.github/pull_request_template.md`, etc.
 + Guessing user credentials from the local `.gitconfig` file.
 
-### CI [↑](#structure)
+### CI
 
+[[Back to the Table of Contents] ↑](#structure)
+
 + Generation of the `.travis.yml` file that runs build and tests on CI under Linux using
   [Dead simple Haskell Travis Settings for Cabal and Stack](https://chshersh.github.io/posts/2019-02-25-haskell-travis).
 + Generation of the `appveyor.yaml` file which runs build and tests on CI under Windows.
@@ -155,16 +171,20 @@
 + `-Werror` is enabled on CI not to miss any warnings.
 + Run HLint checks on CI.
 
-### Others [↑](#structure)
+### Others
 
+[[Back to the Table of Contents] ↑](#structure)
+
 + Carefully collected Haskell project best practices gathered in your projects' scaffold.
 + Generate beginner-friendly default configuration using the `summon config` command.
 + Ability to create a project in the offline mode.
 + Ability to check GHC-specific versions of the corresponding `base` library
   and Stackage snapshot resolver via `summon show ghc` command.
 
-### Project structure example [↑](#structure)
+### Project structure example
 
+[[Back to the Table of Contents] ↑](#structure)
+
 This is an example of the project hierarchy you can get if you are running Summoner's `new` command with all options enabled:
 
 ```
@@ -193,10 +213,14 @@
 └── .travis.yml
 ```
 
-## Get started [↑](#structure)
+## Get started
 
-### Prerequisites [↑](#structure)
+[[Back to the Table of Contents] ↑](#structure)
 
+### Prerequisites
+
+[[Back to the Table of Contents] ↑](#structure)
+
 To start using Summoner make sure that you have the following tools installed on your machine:
 
 * [`git`](https://git-scm.com) – to initialize the GitHub repo.
@@ -210,8 +234,10 @@
 
 However, it is always recommended to use the newest versions of build tools.
 
-### Installation [↑](#structure)
+### Installation
 
+[[Back to the Table of Contents] ↑](#structure)
+
 Summon contains two executables:
 
 * `summon`: scaffold projects using interactive CLI mode.
@@ -219,12 +245,16 @@
 
 Below you can find the description of how to install each of them so you can choose the one you want.
 
-#### Summon-TUI [↑](#structure)
+#### Summon-TUI
 
+[[Back to the Table of Contents] ↑](#structure)
+
 > **NOTE:** `summon-tui` is not supported on Windows. See [this issue](https://github.com/jtdaugherty/vty/pull/1).
 
-##### TUI: download binary [↑](#structure)
+##### TUI: download binary
 
+[[Back to the Table of Contents] ↑](#structure)
+
 You can download binary directly [from GitHub releases](https://github.com/kowainik/summoner/releases).
 
 After downloading binary, make it executable and copy it under convenient location, for example:
@@ -234,19 +264,22 @@
 mv summon-cli-linux ~/.local/bin/summon
 ```
 
-##### TUI: Homebrew [↑](#structure)
+##### TUI: Homebrew
 
+[[Back to the Table of Contents] ↑](#structure)
+
 If you are on MacOS, you can get Summoner using Homebrew Kowainik's Tap.
 
-You need to run the following commands for that:
+You need to run the following command for that:
 
 ```shell
-$ brew tap kowainik/tap
-$ brew install summoner-tui
+$ brew install kowainik/tap/summoner-tui
 ```
 
-##### TUI: Ubuntu [↑](#structure)
+##### TUI: Ubuntu
 
+[[Back to the Table of Contents] ↑](#structure)
+
 If you are on Ubuntu, you can get Summoner from Kowainik's PPA.
 
 You need to run the following commands for that:
@@ -257,8 +290,10 @@
 $ sudo apt install summoner-tui
 ```
 
-##### TUI: from Hackage/Stackage [↑](#structure)
+##### TUI: from Hackage/Stackage
 
+[[Back to the Table of Contents] ↑](#structure)
+
 Using `cabal`:
 
 ```shell
@@ -272,8 +307,10 @@
 stack install summoner-tui
 ```
 
-##### TUI: from source [↑](#structure)
+##### TUI: from source
 
+[[Back to the Table of Contents] ↑](#structure)
+
 Fetch the repo using `cabal`:
 
 ```shell
@@ -304,10 +341,14 @@
 stack install summoner-tui:exe:summon-tui
 ```
 
-#### Summon-CLI [↑](#structure)
+#### Summon-CLI
 
-##### CLI: download binary [↑](#structure)
+[[Back to the Table of Contents] ↑](#structure)
 
+##### CLI: download binary
+
+[[Back to the Table of Contents] ↑](#structure)
+
 You can download binary directly [from GitHub releases](https://github.com/kowainik/summoner/releases).
 
 After downloading binary, make it executable and copy it under convenient location, for example:
@@ -317,19 +358,22 @@
 mv summon-cli-linux ~/.local/bin/summon
 ```
 
-##### CLI: Homebrew [↑](#structure)
+##### CLI: Homebrew
 
+[[Back to the Table of Contents] ↑](#structure)
+
 If you are on MacOS, you can get Summoner using Homebrew Kowainik's Tap.
 
-You need to run the following commands for that:
+You need to run the following command for that:
 
 ```shell
-$ brew tap kowainik/tap
-$ brew install summoner-cli
+$ brew install kowainik/tap/summoner-cli
 ```
 
-##### CLI: Ubuntu [↑](#structure)
+##### CLI: Ubuntu
 
+[[Back to the Table of Contents] ↑](#structure)
+
 If you are on Ubuntu, you can get Summoner from Kowainik's PPA.
 
 You need to run the following commands for that:
@@ -340,8 +384,10 @@
 $ sudo apt install summoner-cli
 ```
 
-##### CLI: from Hackage/Stackage [↑](#structure)
+##### CLI: from Hackage/Stackage
 
+[[Back to the Table of Contents] ↑](#structure)
+
 Using `cabal`:
 
 ```shell
@@ -355,8 +401,10 @@
 stack install summoner
 ```
 
-##### CLI: from source [↑](#structure)
+##### CLI: from source
 
+[[Back to the Table of Contents] ↑](#structure)
+
 Fetch the repo using `cabal`:
 
 ```shell
@@ -387,16 +435,20 @@
 stack install summoner:exe:summon
 ```
 
-### Setup [↑](#structure)
+### Setup
 
+[[Back to the Table of Contents] ↑](#structure)
+
 You can turn on bash auto-completion by running the following command:
 
 ```shell
 source <(summon --bash-completion-script `which summon`)
 ```
 
-## Usage [↑](#structure)
+## Usage
 
+[[Back to the Table of Contents] ↑](#structure)
+
 To start `summon`ing projects nothing additional is required. However, to tweak your settings further, you can use additional configuration settings.
 There are several options you can use to set particular configurations for new projects (in increasing order of priority):
 
@@ -410,8 +462,10 @@
 
 To cut a long story short, the configuration uses [Partial Options Monoid Pattern](https://medium.com/@jonathangfischoff/the-partial-options-monoid-pattern-31914a71fc67).
 
-### File configuration [↑](#structure)
+### File configuration
 
+[[Back to the Table of Contents] ↑](#structure)
+
 Here is the list of the options that can be configured to suit your needs. If options are not specified, they are asked interactively (or some sensible defaults are used).
 
 | Field            | Type    | Description                                                                                                                                                          |
@@ -446,8 +500,10 @@
 
 For a real-life example of the configuration, see [the configuration for projects of the `Kowainik` organization](https://github.com/kowainik/org/blob/master/.summoner.toml).
 
-### Command line arguments [↑](#structure)
+### Command line arguments
 
+[[Back to the Table of Contents] ↑](#structure)
+
 Available commands:
 
 ```
@@ -466,8 +522,10 @@
   -v, --version            Show summoner's version
 ```
 
-#### **summon new** command: [↑](#structure)
+#### **summon new** command:
 
+[[Back to the Table of Contents] ↑](#structure)
+
 ```
 Usage:
   summon new PROJECT_NAME [--ignore-config] [--no-upload] [--offline]
@@ -513,8 +571,10 @@
   -b, --benchmark          Benchmarks
 ```
 
-#### **summon script** command: [↑](#structure)
+#### **summon script** command:
 
+[[Back to the Table of Contents] ↑](#structure)
+
 ```
 Usage:
   summon script BUILD_TOOL [-g|--ghc GHC_VERSION] [-n|--name FILE_NAME]
@@ -526,8 +586,10 @@
   -n,--name FILE_NAME      Name of the script file
 ```
 
-#### **summon show** command: [↑](#structure)
+#### **summon show** command:
 
+[[Back to the Table of Contents] ↑](#structure)
+
 ```
 Usage:
   summon show COMMAND
@@ -551,8 +613,10 @@
 summon new my-project with -letgcpwa without -b --prelude-package relude --prelude-module Relude
 ```
 
-#### **summon config** command: [↑](#structure)
+#### **summon config** command:
 
+[[Back to the Table of Contents] ↑](#structure)
+
 ```
 Usage: summon config [-f|--file=FILENAME]
   Create a default TOML configuration file for summoner
@@ -577,10 +641,14 @@
 summon config --file ~/.summoner-demo.toml
 ```
 
-### TUI [↑](#structure)
+### TUI
 
-#### TUI new command [↑](#structure)
+[[Back to the Table of Contents] ↑](#structure)
 
+#### TUI new command
+
+[[Back to the Table of Contents] ↑](#structure)
+
 ![summon new TUI](https://user-images.githubusercontent.com/8126674/49283553-fc684e00-f4cc-11e8-8411-f173f5f19a71.png)
 
 > **Section 1** – The main section where user inputs data or changes the configurations.
@@ -613,23 +681,33 @@
 
 Note that the form should be valid in order to be able to go to the Confirm window. If there are some errors in the input, you could see details about these errors in the `Status` section of the form.
 
-#### TUI script command [↑](#structure)
+#### TUI script command
 
+[[Back to the Table of Contents] ↑](#structure)
+
 See [CLI description](#cli-script-command-) of the `summon script` command.
 
-#### TUI show command [↑](#structure)
+#### TUI show command
 
+[[Back to the Table of Contents] ↑](#structure)
+
 These commands display the list of supported GHC versions or Licenses. Also, when the license name is specified the window with the scrollable content of the License text is shown.
 
-### CLI [↑](#structure)
+### CLI
 
-#### CLI new command [↑](#structure)
+[[Back to the Table of Contents] ↑](#structure)
 
+#### CLI new command
+
+[[Back to the Table of Contents] ↑](#structure)
+
 In CLI mode of operation Summoner asks about every project setting. Most of the questions contain a default value, so you can press <kbd>Enter</kbd> to choose the default value.
 If some option is specified via a configuration file or CLI arguments, then the question is skipped and the predefined value is used.
 
-#### CLI script command [↑](#structure)
+#### CLI script command
 
+[[Back to the Table of Contents] ↑](#structure)
+
 This command creates minimal `cabal` or `stack` script file which allows you to save some keystrokes and eliminates the need to remember magic words for scripts.
 
 **Cabal example:** `summon script cabal -n Main.hs` generates executable file `Main.hs` with the following content:
@@ -659,12 +737,16 @@
 main = putStrLn "Hello, World!"
 ```
 
-#### CLI show command [↑](#structure)
+#### CLI show command
 
+[[Back to the Table of Contents] ↑](#structure)
+
 These commands display the list of supported GHC versions, or Licenses. Also, when the license name is specified, the content of the License is outputted to the terminal.
 
-## FAQ [↑](#structure)
+## FAQ
 
+[[Back to the Table of Contents] ↑](#structure)
+
 > I want to use HTTPS remote for the created GitHub project, but it creates SSH one. How should I fix this?
 
 We are using `hub` tool to create the projects at GitHub. It uses SSH so that you would get the remote links in the following format:
@@ -703,8 +785,10 @@
 
   * [commersialhaskell/stack issue](https://github.com/commercialhaskell/stack/issues/4488)
 
-## For Developers [↑](#structure)
+## For Developers
 
+[[Back to the Table of Contents] ↑](#structure)
+
 If you'd like to take part in the development processes, here are a few things to keep in mind:
 
 * Summoner is a multi-package project which has two packages inside: `summoner-cli` and `summoner-tui`. We are supporting the same functionality in both of them, so, if it's possible, you should add/change the code in both of the packages.
@@ -713,12 +797,16 @@
 * To sum up, [here is the Contributing guide](https://github.com/kowainik/.github/blob/master/CONTRIBUTING.md#contributing-to-the-kowainik-repositories) we use across the repositories.
 * This project is contributor-friendly, so be kind to other people working on the project.
 
-### Dependencies [↑](#structure)
+### Dependencies
 
+[[Back to the Table of Contents] ↑](#structure)
+
 On Linux, to build the `summoner-tui` you'll need to have `libtinfo` installed. The easiest way to get this is from your system's package manager and is usually available as the package `libtinfo-dev`.
 
-### Build [↑](#structure)
+### Build
 
+[[Back to the Table of Contents] ↑](#structure)
+
 To build the project you can use the following commands:
 
 ```shell=
@@ -733,8 +821,10 @@
 
 for Stack.
 
-### Test [↑](#structure)
+### Test
 
+[[Back to the Table of Contents] ↑](#structure)
+
 Summoner uses the golden tests technique for assuring the correctness of the generated files. For this purpose, we have [the `golden` folder](https://github.com/kowainik/summoner/tree/master/summoner-cli/test/golden) with two sample projects to test against.
 
 To actually run tests you need to run:
@@ -749,8 +839,10 @@
 stack test
 ```
 
-### Run [↑](#structure)
+### Run
 
+[[Back to the Table of Contents] ↑](#structure)
+
 Building Summoner with the recommended method creates two executables: `summon` and `summon-tui`. To run the compiled executable you can use the following commands:
 
 ```shell
@@ -765,7 +857,9 @@
 stack exec summon-tui -- SOME_COMMAND
 ```
 
-## Acknowledgments [↑](#structure)
+## Acknowledgments
+
+[[Back to the Table of Contents] ↑](#structure)
 
 This project was inspired by [Aelve/new-hs](https://github.com/aelve/new-hs#readme),
 which is the tool with the same goal but it's only for creating cabal projects.
diff --git a/src/Summoner.hs b/src/Summoner.hs
--- a/src/Summoner.hs
+++ b/src/Summoner.hs
@@ -10,7 +10,6 @@
        ( module Summoner
        ) where
 
-import Summoner.Ansi as Summoner
 import Summoner.CLI as Summoner
 import Summoner.Config as Summoner
 import Summoner.CustomPrelude as Summoner
diff --git a/src/Summoner/Ansi.hs b/src/Summoner/Ansi.hs
deleted file mode 100644
--- a/src/Summoner/Ansi.hs
+++ /dev/null
@@ -1,52 +0,0 @@
-{- |
-Copyright: (c) 2017-2019 Kowainik
-SPDX-License-Identifier: MPL-2.0
-Maintainer: Kowainik <xrom.xkov@gmail.com>
-
-This module contains functions for colorful printing into terminal.
--}
-
-module Summoner.Ansi
-       ( boldDefault
-       , putStrFlush
-       , prompt
-       , successMessage
-       , warningMessage
-       , errorMessage
-       , infoMessage
-       , skipMessage
-       ) where
-
-import Colourista (blue, bold, formatWith)
-import System.IO (hFlush)
-
-import qualified Colourista
-import qualified Data.Text as T
-
-
--- | Explicit flush ensures prompt messages are in the correct order on all systems.
-putStrFlush :: Text -> IO ()
-putStrFlush msg = do
-    putText msg
-    hFlush stdout
-
-{- | Read 'Text' from standard input after arrow prompt.
--}
-prompt :: IO Text
-prompt = do
-    putStrFlush $ formatWith [blue] "  ->   "
-    T.strip <$> getLine
-
-boldDefault :: Text -> Text
-boldDefault message = formatWith [bold] $ " [" <> message <> "]"
-
-errorMessage, warningMessage, successMessage, infoMessage, skipMessage :: Text -> IO ()
-errorMessage   = Colourista.errorMessage   . indent
-warningMessage = Colourista.warningMessage . indent
-successMessage = Colourista.successMessage . indent
-infoMessage    = Colourista.infoMessage    . indent
-skipMessage    = Colourista.skipMessage    . indent
-
--- | Add 2 spaces in front.
-indent :: Text -> Text
-indent = ("  " <>)
diff --git a/src/Summoner/CLI.hs b/src/Summoner/CLI.hs
--- a/src/Summoner/CLI.hs
+++ b/src/Summoner/CLI.hs
@@ -30,7 +30,8 @@
        , getCustomLicenseText
        ) where
 
-import Colourista (blue, bold, formatWith)
+import Colourista (blue, bold, errorMessage, formatWith, infoMessage, successMessage,
+                   warningMessage)
 import Data.Version (Version, showVersion)
 import Development.GitRev (gitCommitDate, gitHash)
 import NeatInterpolation (text)
@@ -45,7 +46,6 @@
 import System.Info (os)
 import Validation (Validation (..))
 
-import Summoner.Ansi (errorMessage, infoMessage, successMessage, warningMessage)
 import Summoner.Config (Config, ConfigP (..), PartialConfig, defaultConfig, finalise,
                         guessConfigFromGit, loadFileConfig)
 import Summoner.CustomPrelude (CustomPrelude (..))
diff --git a/src/Summoner/CustomPrelude.hs b/src/Summoner/CustomPrelude.hs
--- a/src/Summoner/CustomPrelude.hs
+++ b/src/Summoner/CustomPrelude.hs
@@ -11,7 +11,7 @@
        , customPreludeT
        ) where
 
-import Toml (Key, TomlCodec, (.=))
+import Toml (TomlCodec, (.=))
 
 import Summoner.Text (moduleNameValid, packageNameValid)
 
@@ -25,16 +25,5 @@
 
 customPreludeT :: TomlCodec CustomPrelude
 customPreludeT = CustomPrelude
-    <$> textWithBool packageNameValid "package" .= cpPackage
-    <*> textWithBool moduleNameValid  "module"  .= cpModule
-
--- | Codec for text values.
-textWithBool :: (Text -> Bool) -> Key -> TomlCodec Text
-textWithBool p = Toml.textBy id validateText
-  where
-    validateText :: Text -> Either Text Text
-    validateText s =
-        if p s
-        then Right s
-        else Left "Given Text doesn't pass the validation"
-{-# INLINE textWithBool #-}
+    <$> Toml.validateIf packageNameValid Toml._Text "package" .= cpPackage
+    <*> Toml.validateIf moduleNameValid  Toml._Text "module"  .= cpModule
diff --git a/src/Summoner/License.hs b/src/Summoner/License.hs
--- a/src/Summoner/License.hs
+++ b/src/Summoner/License.hs
@@ -19,11 +19,10 @@
        , showLicenseWithDesc
        ) where
 
+import Colourista (errorMessage)
 import Data.Aeson (FromJSON (..), decodeStrict, withObject, (.:))
 import Relude.Extra.Enum (inverseMap)
 import Shellmet (($|))
-
-import Summoner.Ansi (errorMessage)
 
 import qualified Data.Text as T
 import qualified Text.Show as TS
diff --git a/src/Summoner/Project.hs b/src/Summoner/Project.hs
--- a/src/Summoner/Project.hs
+++ b/src/Summoner/Project.hs
@@ -17,13 +17,14 @@
        , initializeProject
        ) where
 
-import Colourista (bold, formattedMessage, green)
+import Colourista (bold, errorMessage, formattedMessage, green, infoMessage, skipMessage,
+                   successMessage, warningMessage)
+import Data.List.NonEmpty ((<|))
 import NeatInterpolation (text)
-import Relude.Extra.Enum (universe)
+import Relude.Extra.Enum (universe, universeNonEmpty)
 import Shellmet (($?))
 import System.Directory (findExecutable, setCurrentDirectory)
 
-import Summoner.Ansi (errorMessage, infoMessage, skipMessage, successMessage, warningMessage)
 import Summoner.Config (Config, ConfigP (..))
 import Summoner.CustomPrelude (CustomPrelude (..))
 import Summoner.Decision (Decision (..), decisionToBool, decisionsToBools, promptDecisionToBool)
@@ -38,11 +39,12 @@
 import Summoner.Settings (Settings (..))
 import Summoner.Source (fetchSources)
 import Summoner.Template (createProjectTemplate)
-import Summoner.Template.Mempty (memptyIfFalse)
 import Summoner.Text (intercalateMap, moduleNameValid, packageNameValid, packageToModule)
 import Summoner.Tree (showBoldTree, traverseTree)
 
+import qualified Data.List.NonEmpty as NE
 
+
 -- | Generate the project.
 generateProject
     :: Interactivity  -- ^ Is it interactive or non-interactive mode?
@@ -76,7 +78,7 @@
     putText licenseText
     settingsLicenseName  <- if isOffline connectMode
         then NONE <$ infoMessage "'NONE' license is used in offline mode"
-        else choose parseLicenseName "License: " $ ordNub (cLicense : universe)
+        else choose parseLicenseName "License: " $ NE.nub (cLicense <| universeNonEmpty)
 
     -- License creation
     settingsYear <- currentYear
@@ -277,7 +279,7 @@
 createProjectDirectory settings@Settings{..} = do
     let tree = createProjectTemplate settings
     traverseTree tree
-    successMessage "\nThe project with the following structure has been created:"
+    successMessage "The project with the following structure has been created:"
     putTextLn $ showBoldTree tree
     setCurrentDirectory (toString settingsRepo)
 
diff --git a/src/Summoner/Question.hs b/src/Summoner/Question.hs
--- a/src/Summoner/Question.hs
+++ b/src/Summoner/Question.hs
@@ -36,15 +36,15 @@
        , falseMessage
        ) where
 
-import Colourista (bold, cyan, formatWith, formattedMessage, green, italic)
+import Colourista (blue, bold, cyan, errorMessage, formatWith, formattedMessage, green, italic,
+                   warningMessage)
 import System.Directory (doesPathExist, getCurrentDirectory)
 import System.FilePath ((</>))
+import System.IO (hFlush)
 
-import Summoner.Ansi (boldDefault, errorMessage, prompt, putStrFlush, warningMessage)
 import Summoner.Text (headToUpper, intercalateMap)
 
 import qualified Data.Text as T
-import qualified Relude.Unsafe as Unsafe
 
 
 {- HLINT ignore "Redundant multi-way if" -}
@@ -129,22 +129,23 @@
 choose :: Show a
     => (Text -> Maybe a)  -- ^ Parse function
     -> Text  -- ^ Question text.
-    -> [a]   -- ^ List of available options.
+    -> NonEmpty a   -- ^ List of available options.
     -> IO a  -- ^ The chosen option.
 choose parser question choices = do
-    let showChoices = map show choices
+    let showChoices = map show $ toList choices
     printQuestion question showChoices
     answer <- prompt
     if T.null answer
-        then pure (Unsafe.head choices)
+        then pure (head choices)
         else whenNothing (parser answer)
                 (errorMessage "This wasn't a valid choice." >> choose parser question choices)
 
 -- | Like 'choose' but the possible answer are 'Y' or 'N'.
-chooseYesNo :: YesNoPrompt -- ^ Target and Prompt
-            -> IO a -- ^ action for 'Y' answer
-            -> IO a -- ^ action for 'N' answer
-            -> IO a
+chooseYesNo
+    :: YesNoPrompt -- ^ Target and Prompt
+    -> IO a -- ^ action for 'Y' answer
+    -> IO a -- ^ action for 'N' answer
+    -> IO a
 chooseYesNo p@YesNoPrompt {..} yesDo noDo = do
     printQuestion yesNoPrompt ["y", "n"]
     answer <- yesOrNo <$> prompt
@@ -274,3 +275,23 @@
 doesExistProjectName projectName = do
     curPath <- getCurrentDirectory
     doesPathExist $ curPath </> toString projectName
+
+----------------------------------------------------------------------------
+-- Internal implementation details
+----------------------------------------------------------------------------
+
+-- | Explicit flush ensures prompt messages are in the correct order on all systems.
+putStrFlush :: Text -> IO ()
+putStrFlush msg = do
+    putText msg
+    hFlush stdout
+
+{- | Read 'Text' from standard input after arrow prompt.
+-}
+prompt :: IO Text
+prompt = do
+    putStrFlush $ formatWith [blue] "  ->   "
+    T.strip <$> getLine
+
+boldDefault :: Text -> Text
+boldDefault message = formatWith [bold] $ " [" <> message <> "]"
diff --git a/src/Summoner/Source.hs b/src/Summoner/Source.hs
--- a/src/Summoner/Source.hs
+++ b/src/Summoner/Source.hs
@@ -13,11 +13,11 @@
        , fetchSource
        ) where
 
+import Colourista (errorMessage, infoMessage)
 import Control.Exception (catch)
 import System.Process (readProcess)
 import Toml (TomlBiMapError (..), TomlCodec)
 
-import Summoner.Ansi (errorMessage, infoMessage)
 import Summoner.Mode (ConnectMode (..), isOffline)
 import Summoner.Tree (TreeFs, pathToTree)
 
diff --git a/src/Summoner/Template.hs b/src/Summoner/Template.hs
--- a/src/Summoner/Template.hs
+++ b/src/Summoner/Template.hs
@@ -15,7 +15,6 @@
 import Summoner.Template.Doc (docFiles)
 import Summoner.Template.GitHub (gitHubFiles)
 import Summoner.Template.Haskell (haskellFiles)
-import Summoner.Template.Mempty (memptyIfFalse)
 import Summoner.Template.Stack (stackFiles)
 import Summoner.Tree (TreeFs (..), insertTree)
 
diff --git a/src/Summoner/Template/Cabal.hs b/src/Summoner/Template/Cabal.hs
--- a/src/Summoner/Template/Cabal.hs
+++ b/src/Summoner/Template/Cabal.hs
@@ -19,7 +19,6 @@
 import Summoner.GhcVer (cabalBaseVersions, showGhcVer)
 import Summoner.License (LicenseName (..))
 import Summoner.Settings (Settings (..))
-import Summoner.Template.Mempty (memptyIfFalse)
 import Summoner.Text (endLine, intercalateMap, packageToModule)
 import Summoner.Tree (TreeFs (..))
 
diff --git a/src/Summoner/Template/GitHub.hs b/src/Summoner/Template/GitHub.hs
--- a/src/Summoner/Template/GitHub.hs
+++ b/src/Summoner/Template/GitHub.hs
@@ -30,7 +30,6 @@
 import Summoner.Default (defaultCabal, defaultGHC)
 import Summoner.GhcVer (GhcVer (..), oldGhcs, showGhcVer)
 import Summoner.Settings (Settings (..))
-import Summoner.Template.Mempty (memptyIfFalse)
 import Summoner.Text (endLine, intercalateMap, tconcatMap)
 import Summoner.Tree (TreeFs (..))
 
diff --git a/src/Summoner/Template/Mempty.hs b/src/Summoner/Template/Mempty.hs
deleted file mode 100644
--- a/src/Summoner/Template/Mempty.hs
+++ /dev/null
@@ -1,18 +0,0 @@
-{- |
-Copyright: (c) 2017-2019 Kowainik
-SPDX-License-Identifier: MPL-2.0
-Maintainer: Kowainik <xrom.xkov@gmail.com>
-
-'Monoid' utilities for templates.
--}
-
-module Summoner.Template.Mempty
-       ( memptyIfFalse
-       ) where
-
-
-{- | Returns the given value in case of the given 'Bool' is 'True'.
-Otherwise, it returns 'mempty'.
--}
-memptyIfFalse :: Monoid m => Bool -> m -> m
-memptyIfFalse p val = if p then val else mempty
diff --git a/summoner.cabal b/summoner.cabal
--- a/summoner.cabal
+++ b/summoner.cabal
@@ -1,6 +1,6 @@
 cabal-version:       2.4
 name:                summoner
-version:             2.0.0.0
+version:             2.0.1.0
 synopsis:            Tool for scaffolding fully configured batteries-included production-level Haskell projects.
 description:         Tool for scaffolding fully configured batteries-included production-level Haskell projects.
                      See [README.md](https://github.com/kowainik/summoner#-summoner) for details.
@@ -19,6 +19,7 @@
 tested-with:         GHC == 8.4.4
                      GHC == 8.6.5
                      GHC == 8.8.3
+                     GHC == 8.10.1
 extra-source-files:
     examples/summoner-default.toml
 
@@ -71,13 +72,12 @@
   location: git@github.com:kowainik/summoner.git
 
 common common-options
-  build-depends:       base >= 4.11 && < 4.14
-                     , relude ^>= 0.6.0.0
+  build-depends:       base >= 4.11 && < 4.15
+                     , relude ^>= 0.7.0.0
 
   mixins:              base hiding (Prelude)
                      , relude (Relude as Prelude
                               , Relude.Extra.Enum
-                              , Relude.Unsafe
                               )
 
   ghc-options:         -Wall
@@ -95,6 +95,8 @@
   if impl(ghc >= 8.8)
     ghc-options:       -Wmissing-deriving-strategies
                        -Werror=missing-deriving-strategies
+  if impl(ghc >= 8.10)
+    ghc-options:       -Wunused-packages
 
   default-extensions:  DeriveGeneric
                        DerivingStrategies
@@ -112,7 +114,6 @@
   import:              common-options
   hs-source-dirs:      src
   exposed-modules:     Summoner
-                         Summoner.Ansi
                          Summoner.CLI
                          Summoner.Config
                          Summoner.CustomPrelude
@@ -130,7 +131,6 @@
                            Summoner.Template.Doc
                            Summoner.Template.GitHub
                            Summoner.Template.Haskell
-                           Summoner.Template.Mempty
                            Summoner.Template.Script
                            Summoner.Template.Stack
                          Summoner.Text
@@ -140,8 +140,7 @@
   other-modules:       Paths_summoner
 
   build-depends:       aeson >= 1.2.4.0 && < 1.5
-                     , bytestring ^>= 0.10.8.2
-                     , colourista ^>= 0.0
+                     , colourista ^>= 0.1
                      , containers ^>= 0.6
                      , directory ^>= 1.3.0.2
                      , filepath ^>= 1.4.1.2
@@ -152,9 +151,9 @@
                      , process ^>= 1.6.1.0
                      , shellmet ^>= 0.0.3.0
                      , text ^>= 1.2.3.0
-                     , time >= 1.8 && < 1.10
-                     , tomland ^>= 1.2.1.0
-                     , validation-selective ^>= 0.0.0.0
+                     , time >= 1.8 && < 1.11
+                     , tomland ^>= 1.3.0.0
+                     , validation-selective >= 0.0.0.0 && < 0.2
 
 executable summon
   import:              common-options
diff --git a/test/Test/TomlSpec.hs b/test/Test/TomlSpec.hs
--- a/test/Test/TomlSpec.hs
+++ b/test/Test/TomlSpec.hs
@@ -6,7 +6,7 @@
 import Relude.Extra.Enum (universe)
 import Test.Hspec (Spec, describe, it, shouldReturn, shouldSatisfy)
 import Test.Hspec.Hedgehog (hedgehog)
-import Toml.Bi.Code (decode, encode)
+import Toml.Codec.Code (decode, encode)
 import Validation (Validation (..))
 
 import Summoner.Config (ConfigP (..), PartialConfig, configCodec, defaultConfig, finalise)
