brittany/doc/showcases/Module.md

2.6 KiB

Last updated for brittany version 0.10.0.0.

Example layouting of the module header (exports/imports)

On default settings

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE LambdaCase #-}

module Main
  ( main
  )
where

import qualified Paths_brittany
import           Language.Haskell.Brittany

import           Network.Wai
import           Network.HTTP.Types
import qualified Network.Wai.Handler.Warp      as Warp

import           Data.String

import qualified Data.ByteString               as BS
import qualified Data.ByteString.Lazy          as BSL

import           Control.Monad.Loops

import qualified Data.Text.Encoding            as Text
import qualified Data.Text                     as Text

import           Data.Version                   ( showVersion )

import qualified System.Mem
import qualified Control.Concurrent
import           Control.Concurrent.Async       ( async
                                                , waitEitherCatch
                                                , waitEitherCatchCancel
                                                )
import qualified Data.Aeson                    as Aeson
import           Data.Time.Clock
import           Data.Time.Format
import           Text.Parsec             hiding ( (<|>) )

For long module names, things will be moved one line below and aligned as before. Long identifiers may overflow our 80 column limit:

import qualified Example.Very.Long.Module.Name.Internal
                                               as T
import           Example.Very.Long.Module.Name.Internal
                                                ( a
                                                , b
                                                , c
                                                )
import           Example.Very.Long.Module.Name.Internal
                                                ( someVeryLongAndDescriptiveFunctionName
                                                )

Alternative setting

If you have many long module names or use large identifiers, you might be interested in these alternative settings:

conf_layout:
  lconfig_importColumn: 21
  lconfig_importAsColumn: 70

Now, our previous examples becomes:

import qualified Example.Very.Long.Module.Name.Strict.Internal     as T
import           Example.Very.Long.Module.Name.Strict.Internal
                   ( a
                   , b
                   , c
                   )
import           Example.Very.Long.Module.Name.Strict.Internal
                   ( someVeryLongAndDescriptiveFunctionName
                   )