steps:
  # Convert some ASCII sequences to their Unicode equivalents. This is disabled
  # by default.
  # - unicode_syntax:
  #     # In order to make this work, we also need to insert the UnicodeSyntax
  #     # language pragma. If this flag is set to true, we insert it when it's
  #     # not already present. You may want to disable it if you configure
  #     # language extensions using some other method than pragmas. Default:
  #     # true.
  #     add_language_pragma: true

  - simple_align:
      cases: true
      top_level_patterns: true
      records: true

  # Import cleanup
  - imports:
      align: group
      list_align: after_alias
      pad_module_names: true
      long_list_align: inline
      empty_list_align: inherit
      list_padding: 4
      separate_lists: false
      space_surround: false

  - language_pragmas:
      style: vertical
      align: true
      remove_redundant: true

  - tabs:
      spaces: 4

  - trailing_whitespace: {}

  # squash: {}

columns: 80

newline: lf

language_extensions:
  - ApplicativeDo
  - BangPatterns
  - BlockArguments
  - DataKinds
  - DefaultSignatures
  - DeriveAnyClass
  - DeriveDataTypeable
  - DeriveFoldable
  - DeriveGeneric
  - DeriveTraversable
  - DerivingStrategies
  - EmptyDataDecls
  - FlexibleContexts
  - FlexibleInstances
  - FunctionalDependencies
  - GADTs
  - GeneralizedNewtypeDeriving
  - LambdaCase
  - MagicHash
  - MultiParamTypeClasses
  - NamedFieldPuns
  - NoImplicitPrelude
  - NumericUnderscores
  - OverloadedStrings
  - PartialTypeSignatures
  - PatternSynonyms
  - QuasiQuotes
  - Rank2Types
  - RankNTypes
  - RecordWildCards
  - ScopedTypeVariables
  - StandaloneDeriving
  - TemplateHaskell
  - TupleSections
  - TypeApplications
  - TypeFamilies
  - TypeOperators
  - UnboxedTuples
  - UnicodeSyntax
  - ViewPatterns