Skip to content

Separate qualified and unqualified imports #1148

@nikita-volkov

Description

@nikita-volkov

Here's an example of an import block formatted with Ormolu:

module MyPackage where

import qualified Data.Primitive.ByteArray as ByteArray
import qualified Data.Text.Array as Array
import MyPackage.Classes (SomeClass(..))
import MyPackage.Prelude
import qualified MyPackage.TextCompat.Array as Array

data SomeType
ImportQualifiedPost version
module MyPackage where

import Data.Primitive.ByteArray qualified as ByteArray
import Data.Text.Array qualified as Array
import MyPackage.Classes (SomeClass(..))
import MyPackage.Prelude
import MyPackage.TextCompat.Array qualified as Array

data SomeType

I suggest to visually separate the imports into qualified and unqualified blocks:

module MyPackage where

import MyPackage.Classes (SomeClass(..))
import MyPackage.Prelude

import qualified Data.Primitive.ByteArray as ByteArray
import qualified Data.Text.Array as Array
import qualified MyPackage.TextCompat.Array as Array

data SomeType
ImportQualifiedPost version
module MyPackage where

import MyPackage.Classes (SomeClass(..))
import MyPackage.Prelude

import Data.Primitive.ByteArray qualified as ByteArray
import Data.Text.Array qualified as Array
import MyPackage.TextCompat.Array qualified as Array

data SomeType

Why?

  1. It removes the annoying chaotic jumps before module names, caused by the qualified keyword.
  2. It clearly separates qualified and unqualified imports, which is especially useful in case of ImportQualifiedPost, because the type of import is no longer immediately distinguishable.

Metadata

Metadata

Assignees

No one assigned

    Labels

    styleNitpicking and things related to purely visual aspect for formatting.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions