├── .envrc ├── haskell ├── hie.yaml ├── .ghcid ├── src │ └── Main.hs ├── default.nix ├── haskell-template.cabal └── .hlint.yaml ├── .gitattributes ├── .vscode ├── settings.json └── extensions.json ├── fourmolu.yaml ├── rusty ├── src │ └── lib.rs ├── Cargo.toml ├── Cargo.lock └── default.nix ├── .gitignore ├── treefmt.toml ├── nix └── mergeDevShells.nix ├── README.md ├── LICENSE ├── flake.nix └── flake.lock /.envrc: -------------------------------------------------------------------------------- 1 | use flake -------------------------------------------------------------------------------- /haskell/hie.yaml: -------------------------------------------------------------------------------- 1 | cradle: 2 | cabal: -------------------------------------------------------------------------------- /haskell/.ghcid: -------------------------------------------------------------------------------- 1 | --warnings -T ":main" 2 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | flake.lock linguist-generated=true 2 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.formatOnType": true, 3 | "editor.formatOnSave": true, 4 | "nixEnvSelector.nixFile": "${workspaceRoot}/shell.nix", 5 | "haskell.formattingProvider": "fourmolu" 6 | } 7 | -------------------------------------------------------------------------------- /fourmolu.yaml: -------------------------------------------------------------------------------- 1 | indentation: 2 2 | comma-style: leading 3 | record-brace-space: true 4 | indent-wheres: true 5 | diff-friendly-import-export: true 6 | respectful: true 7 | haddock-style: multi-line 8 | newlines-between-decls: 1 -------------------------------------------------------------------------------- /rusty/src/lib.rs: -------------------------------------------------------------------------------- 1 | #[cfg(test)] 2 | mod tests { 3 | #[test] 4 | fn it_works() { 5 | let result = 2 + 2; 6 | assert_eq!(result, 4); 7 | } 8 | } 9 | 10 | #[no_mangle] 11 | pub extern "C" fn double_input(x: i32) -> i32 { 12 | 2 * x 13 | } 14 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | // See https://go.microsoft.com/fwlink/?LinkId=827846 3 | // for the documentation about the extensions.json format 4 | "recommendations": [ 5 | "haskell.haskell", 6 | // "arrterian.nix-env-selector", 7 | "bbenoist.nix", 8 | "jnoortheen.nix-ide", 9 | "tamasfe.even-better-toml" 10 | ] 11 | } -------------------------------------------------------------------------------- /rusty/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "rusty" 3 | version = "0.1.0" 4 | edition = "2018" 5 | resolver = "2" 6 | 7 | [dependencies] 8 | libc = "0.2.125" 9 | 10 | [lib] 11 | name = "rusty" 12 | crate-type = ["staticlib"] # , "cdylib"] 13 | 14 | [package.metadata.nix] 15 | app = true 16 | build = true 17 | library = true 18 | systems = ["x86_64-linux", "x86_64-darwin", "aarch64-linux", "aarch64-darwin"] 19 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | dist-* 3 | cabal-dev 4 | *.o 5 | *.hi 6 | *.hie 7 | *.chi 8 | *.chs.h 9 | *.dyn_o 10 | *.dyn_hi 11 | .hpc 12 | .hsenv 13 | .cabal-sandbox/ 14 | cabal.sandbox.config 15 | *.prof 16 | *.aux 17 | *.hp 18 | *.eventlog 19 | .stack-work/ 20 | cabal.project.local 21 | cabal.project.local~ 22 | .HTF/ 23 | .ghc.environment.* 24 | result 25 | result-* 26 | 27 | # direnv 28 | .direnv 29 | 30 | rusty/target -------------------------------------------------------------------------------- /rusty/Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "libc" 7 | version = "0.2.125" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "5916d2ae698f6de9bfb891ad7a8d65c09d232dc58cc4ac433c7da3b2fd84bc2b" 10 | 11 | [[package]] 12 | name = "rusty" 13 | version = "0.1.0" 14 | dependencies = [ 15 | "libc", 16 | ] 17 | -------------------------------------------------------------------------------- /haskell/src/Main.hs: -------------------------------------------------------------------------------- 1 | module Main where 2 | 3 | import Main.Utf8 qualified as Utf8 4 | 5 | import Foreign.C.Types 6 | 7 | foreign import ccall "double_input" doubleInput :: CInt -> CInt 8 | 9 | {- | 10 | Main entry point. 11 | 12 | The `bin/run` script will invoke this function. See `.ghcid` file to change 13 | that. 14 | -} 15 | main :: IO () 16 | main = do 17 | Utf8.withUtf8 $ do 18 | putStrLn "Haskell: Hello 🌎" 19 | print $ doubleInput 21 20 | -------------------------------------------------------------------------------- /treefmt.toml: -------------------------------------------------------------------------------- 1 | [formatter.haskell] 2 | command = "fourmolu" 3 | options = [ 4 | "--ghc-opt", 5 | "-XImportQualifiedPost", 6 | "--ghc-opt", 7 | "-XTypeApplications", 8 | "--mode", 9 | "inplace", 10 | "--check-idempotence", 11 | ] 12 | includes = ["*.hs"] 13 | 14 | [formatter.nix] 15 | command = "nixpkgs-fmt" 16 | includes = ["*.nix"] 17 | 18 | [formatter.cabal] 19 | command = "cabal-fmt" 20 | options = ["--inplace"] 21 | includes = ["*.cabal"] 22 | -------------------------------------------------------------------------------- /nix/mergeDevShells.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | # Merge multiple devShells into one, such that entering the resulting 4 | # dev shell puts one in the environment of all the input dev shells. 5 | envs: 6 | pkgs.mkShell (builtins.foldl' 7 | (a: b: 8 | # Standard shell attributes 9 | { 10 | buildInputs = (a.buildInputs or []) ++ (b.buildInputs or []); 11 | nativeBuildInputs = (a.nativeBuildInputs or []) ++ (b.nativeBuildInputs or []); 12 | propagatedBuildInputs = (a.propagatedBuildInputs or []) ++ (b.propagatedBuildInputs or []); 13 | propagatedNativeBuildInputs = (a.propagatedNativeBuildInputs or []) ++ (b.propagatedNativeBuildInputs or []); 14 | shellHook = (a.shellHook or "") + "\n" + (b.shellHook or ""); 15 | } // 16 | # Environment variables 17 | ( 18 | let 19 | isUpperCase = s: pkgs.lib.strings.toUpper s == s; 20 | filterUpperCaseAttrs = attrs: pkgs.lib.attrsets.filterAttrs (n: _: isUpperCase n) attrs; 21 | in 22 | filterUpperCaseAttrs a // filterUpperCaseAttrs b 23 | ) 24 | ) 25 | (pkgs.mkShell { }) 26 | envs) 27 | -------------------------------------------------------------------------------- /rusty/default.nix: -------------------------------------------------------------------------------- 1 | { inputs, system }: 2 | 3 | let 4 | pkgs = inputs.nixpkgs.legacyPackages.${system}; 5 | 6 | # Subflake for Rust development environment and build 7 | rustFlake = inputs.nci.lib.makeOutputs { 8 | # Documentation and examples: 9 | # https://github.com/yusdacra/rust-nix-templater/blob/master/template/flake.nix 10 | root = ./.; 11 | overrides = { 12 | shell = common: prev: { 13 | packages = prev.packages ++ [ 14 | pkgs.rust-analyzer 15 | ]; 16 | env = prev.env ++ [ 17 | # For downstream projects (eg: Haskell) to access the Rust 18 | # library in their runtime tools like repls and language 19 | # servers. 20 | (pkgs.lib.nameValuePair "LD_LIBRARY_PATH" "${rustFlake.packages.${system}.rusty}/lib") 21 | ]; 22 | }; 23 | }; 24 | }; 25 | in 26 | { 27 | # Used by `nix build ...` 28 | packages = { 29 | rusty = rustFlake.packages.${system}.rusty; 30 | }; 31 | # Used by `nix develop ...` 32 | devShells = { 33 | rusty = rustFlake.devShell.${system}; 34 | }; 35 | } 36 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # monorepo-nix-template 2 | 3 | A simple demonstration of writing a top-level `flake.nix` that delegates to the inner `default.nix` (flake alike) of a sub-project. This pattern is useful in monorepos with many sub-projects written in different programming languages. 4 | 5 | Files of interest: 6 | 7 | - `flake.nix` -- top-level flake 8 | - `haskell/project.nix` -- haskell flake-alike 9 | - `rust/project.nix` -- rust flake-alike 10 | 11 | Features 12 | 13 | - Haskell app statically links to Rust library 14 | - Works on Linux and macOS (M1) 15 | - IDE experience works for both languages through HLS. 16 | - Autoformat by treefmt 17 | 18 | ## Haskell 19 | 20 | The Haskell programs links with the Rust library. 21 | 22 | ``` 23 | nix develop -c sh -c "cd ./haskell && cabal run" 24 | ``` 25 | 26 | ## Rust 27 | 28 | ``` 29 | nix develop -c sh -c "cd ./rusty && cargo build" 30 | ``` 31 | 32 | ## Nix 33 | 34 | Run the full program, 35 | 36 | ``` 37 | nix run 38 | ``` 39 | 40 | Just build it, 41 | 42 | ``` 43 | nix build 44 | ``` 45 | 46 | ## Alternative approaches 47 | 48 | - https://github.com/hercules-ci/flake-parts 49 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Sridhar Ratnakumar 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /haskell/default.nix: -------------------------------------------------------------------------------- 1 | { inputs, system }: 2 | 3 | let 4 | pkgs = inputs.nixpkgs.legacyPackages.${system}; 5 | inherit (pkgs.lib.trivial) pipe flip; 6 | inherit (pkgs.lib.lists) optionals; 7 | 8 | # Specify GHC version here. To get the appropriate value, run: 9 | # nix-env -f "" -qaP -A haskell.compiler 10 | hp = pkgs.haskellPackages; # Eg: pkgs.haskell.packages.ghc921; 11 | # Specify your build/dev dependencies here. 12 | shellDeps = with hp; [ 13 | cabal-fmt 14 | cabal-install 15 | ghcid 16 | haskell-language-server 17 | fourmolu 18 | hlint 19 | pkgs.nixpkgs-fmt 20 | pkgs.treefmt 21 | ]; 22 | project = returnShellEnv: 23 | hp.developPackage { 24 | inherit returnShellEnv; 25 | name = "haskell-template"; 26 | root = ./.; 27 | withHoogle = false; 28 | overrides = self: super: with pkgs.haskell.lib; { 29 | # Use callCabal2nix to override Haskell dependencies here 30 | # cf. https://tek.brick.do/K3VXJd8mEKO7 31 | # Example: 32 | # > NanoID = self.callCabal2nix "NanoID" inputs.NanoID { }; 33 | # Assumes that you have the 'NanoID' flake input defined. 34 | rusty = inputs.self.packages.${system}.rusty; 35 | }; 36 | modifier = drv: 37 | pkgs.haskell.lib.overrideCabal drv 38 | (drv: { 39 | buildTools = (drv.buildTools or [ ]) ++ pkgs.lib.lists.optionals returnShellEnv shellDeps; 40 | }); 41 | }; 42 | 43 | in 44 | { 45 | # Used by `nix build ...` 46 | packages = { 47 | haskell = project false; 48 | }; 49 | # Used by `nix run ...` 50 | apps = { 51 | haskell = { 52 | type = "app"; 53 | program = "${inputs.self.packages.${system}.haskell}/bin/haskell-template"; 54 | }; 55 | }; 56 | # Used by `nix develop ...` 57 | devShells = { 58 | haskell = project true; 59 | }; 60 | } 61 | -------------------------------------------------------------------------------- /flake.nix: -------------------------------------------------------------------------------- 1 | { 2 | description = "haskell-template's description"; 3 | inputs = { 4 | nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; 5 | flake-utils.url = "github:numtide/flake-utils"; 6 | flake-utils.inputs.nixpkgs.follows = "nixpkgs"; 7 | 8 | # For Rust development. 9 | nci.url = "github:yusdacra/nix-cargo-integration"; 10 | nci.inputs.nixpkgs.follows = "nixpkgs"; 11 | }; 12 | # We use flake-utils to, effectively, allow us to pass this function: 13 | # 14 | # Set Input -> System -> Set Output 15 | # 16 | # cf. https://github.com/NixOS/nix/issues/3843#issuecomment-661720562 17 | outputs = inputs: 18 | inputs.flake-utils.lib.eachDefaultSystem 19 | (system: 20 | let 21 | pkgs = inputs.nixpkgs.legacyPackages.${system}; 22 | in 23 | rec { 24 | # Project "flakes" are also parametrized by inputs and system. 25 | projects = { 26 | haskell = import ./haskell { inherit inputs system; }; 27 | rust = import ./rusty { inherit inputs system; }; 28 | }; 29 | packages = 30 | projects.haskell.packages 31 | // projects.rust.packages; 32 | apps = 33 | projects.haskell.apps; 34 | devShells = 35 | projects.haskell.devShells 36 | // projects.rust.devShells; 37 | # Default derivations. 38 | defaultPackage = 39 | inputs.self.packages.${system}.haskell; 40 | devShell = 41 | (import ./nix/mergeDevShells.nix { inherit pkgs; }) 42 | (pkgs.lib.attrsets.attrValues devShells); 43 | } 44 | ) 45 | // { 46 | # Specify the systems Hercules CI must build, 47 | # https://docs.hercules-ci.com/hercules-ci/guides/upgrade-to-agent-0.9/#_upgrade_your_repositories 48 | herculesCI.ciSystems = [ "x86_64-linux" ]; 49 | }; 50 | } 51 | -------------------------------------------------------------------------------- /haskell/haskell-template.cabal: -------------------------------------------------------------------------------- 1 | cabal-version: 2.4 2 | name: haskell-template 3 | version: 0.1.0.0 4 | license: MIT 5 | copyright: 2022 Sridhar Ratnakumar 6 | maintainer: srid@srid.ca 7 | author: Sridhar Ratnakumar 8 | category: Web 9 | 10 | -- TODO: Before hackage release. 11 | -- A short (one-line) description of the package. 12 | -- synopsis: 13 | 14 | -- A longer description of the package. 15 | -- description: 16 | 17 | -- A URL where users can report bugs. 18 | -- bug-reports: 19 | 20 | extra-source-files: 21 | LICENSE 22 | README.md 23 | 24 | executable haskell-template 25 | build-depends: 26 | , aeson 27 | , async 28 | , base >=4.13.0.0 && <=4.18.0.0 29 | , bytestring 30 | , containers 31 | , data-default 32 | , directory 33 | , filepath 34 | , mtl 35 | , optics-core 36 | , profunctors 37 | , relude 38 | , shower 39 | , text 40 | , time 41 | , with-utf8 42 | 43 | mixins: 44 | base hiding (Prelude), 45 | relude (Relude as Prelude, Relude.Container.One), 46 | relude 47 | 48 | ghc-options: 49 | -Wall -Wincomplete-record-updates -Wincomplete-uni-patterns 50 | -Wmissing-deriving-strategies -Wunused-foralls -Wunused-foralls 51 | -fprint-explicit-foralls -fprint-explicit-kinds 52 | 53 | default-extensions: 54 | NoStarIsType 55 | BangPatterns 56 | ConstraintKinds 57 | DataKinds 58 | DeriveDataTypeable 59 | DeriveFoldable 60 | DeriveFunctor 61 | DeriveGeneric 62 | DeriveLift 63 | DeriveTraversable 64 | DerivingStrategies 65 | DerivingVia 66 | EmptyCase 67 | EmptyDataDecls 68 | EmptyDataDeriving 69 | ExistentialQuantification 70 | ExplicitForAll 71 | FlexibleContexts 72 | FlexibleInstances 73 | GADTSyntax 74 | GeneralisedNewtypeDeriving 75 | ImportQualifiedPost 76 | KindSignatures 77 | LambdaCase 78 | MultiParamTypeClasses 79 | MultiWayIf 80 | NumericUnderscores 81 | OverloadedStrings 82 | PolyKinds 83 | PostfixOperators 84 | RankNTypes 85 | ScopedTypeVariables 86 | StandaloneDeriving 87 | StandaloneKindSignatures 88 | TupleSections 89 | TypeApplications 90 | TypeFamilies 91 | TypeOperators 92 | ViewPatterns 93 | 94 | main-is: Main.hs 95 | hs-source-dirs: src 96 | default-language: Haskell2010 97 | 98 | extra-libraries: rusty -------------------------------------------------------------------------------- /flake.lock: -------------------------------------------------------------------------------- 1 | { 2 | "nodes": { 3 | "crane": { 4 | "flake": false, 5 | "locked": { 6 | "lastModified": 1644785799, 7 | "narHash": "sha256-VpAJO1L0XeBvtCuNGK4IDKp6ENHIpTrlaZT7yfBCvwo=", 8 | "owner": "ipetkov", 9 | "repo": "crane", 10 | "rev": "fc7a94f841347c88f2cb44217b2a3faa93e2a0b2", 11 | "type": "github" 12 | }, 13 | "original": { 14 | "owner": "ipetkov", 15 | "repo": "crane", 16 | "type": "github" 17 | } 18 | }, 19 | "devshell": { 20 | "inputs": { 21 | "flake-utils": "flake-utils_2", 22 | "nixpkgs": [ 23 | "nci", 24 | "nixpkgs" 25 | ] 26 | }, 27 | "locked": { 28 | "lastModified": 1650900878, 29 | "narHash": "sha256-qhNncMBSa9STnhiLfELEQpYC1L4GrYHNIzyCZ/pilsI=", 30 | "owner": "numtide", 31 | "repo": "devshell", 32 | "rev": "d97df53b5ddaa1cfbea7cddbd207eb2634304733", 33 | "type": "github" 34 | }, 35 | "original": { 36 | "owner": "numtide", 37 | "repo": "devshell", 38 | "type": "github" 39 | } 40 | }, 41 | "dream2nix": { 42 | "inputs": { 43 | "alejandra": [ 44 | "nci", 45 | "nixpkgs" 46 | ], 47 | "crane": "crane", 48 | "flake-utils-pre-commit": [ 49 | "nci", 50 | "nixpkgs" 51 | ], 52 | "gomod2nix": [ 53 | "nci", 54 | "nixpkgs" 55 | ], 56 | "mach-nix": [ 57 | "nci", 58 | "nixpkgs" 59 | ], 60 | "nixpkgs": [ 61 | "nci", 62 | "nixpkgs" 63 | ], 64 | "node2nix": [ 65 | "nci", 66 | "nixpkgs" 67 | ], 68 | "poetry2nix": [ 69 | "nci", 70 | "nixpkgs" 71 | ], 72 | "pre-commit-hooks": [ 73 | "nci", 74 | "nixpkgs" 75 | ] 76 | }, 77 | "locked": { 78 | "lastModified": 1651844867, 79 | "narHash": "sha256-a+bAmmeIudRVY23ZkEB5W5xJumBY3ydsiDIGN/56NmQ=", 80 | "owner": "nix-community", 81 | "repo": "dream2nix", 82 | "rev": "e5d0e9cdb00695b0b63d1f52ff3b39c0e3035fe3", 83 | "type": "github" 84 | }, 85 | "original": { 86 | "owner": "nix-community", 87 | "repo": "dream2nix", 88 | "type": "github" 89 | } 90 | }, 91 | "flake-utils": { 92 | "locked": { 93 | "lastModified": 1642700792, 94 | "narHash": "sha256-XqHrk7hFb+zBvRg6Ghl+AZDq03ov6OshJLiSWOoX5es=", 95 | "owner": "numtide", 96 | "repo": "flake-utils", 97 | "rev": "846b2ae0fc4cc943637d3d1def4454213e203cba", 98 | "type": "github" 99 | }, 100 | "original": { 101 | "owner": "numtide", 102 | "repo": "flake-utils", 103 | "type": "github" 104 | } 105 | }, 106 | "flake-utils_2": { 107 | "locked": { 108 | "lastModified": 1642700792, 109 | "narHash": "sha256-XqHrk7hFb+zBvRg6Ghl+AZDq03ov6OshJLiSWOoX5es=", 110 | "owner": "numtide", 111 | "repo": "flake-utils", 112 | "rev": "846b2ae0fc4cc943637d3d1def4454213e203cba", 113 | "type": "github" 114 | }, 115 | "original": { 116 | "owner": "numtide", 117 | "repo": "flake-utils", 118 | "type": "github" 119 | } 120 | }, 121 | "nci": { 122 | "inputs": { 123 | "devshell": "devshell", 124 | "dream2nix": "dream2nix", 125 | "nixpkgs": [ 126 | "nixpkgs" 127 | ], 128 | "rustOverlay": "rustOverlay" 129 | }, 130 | "locked": { 131 | "lastModified": 1652249691, 132 | "narHash": "sha256-5hb8Ran5qrbrgQmh0KIqG40g8Maspkncj+s8RgZ/qe0=", 133 | "owner": "yusdacra", 134 | "repo": "nix-cargo-integration", 135 | "rev": "d457a23ed6dab1d0d22d3478e76547fa582ff823", 136 | "type": "github" 137 | }, 138 | "original": { 139 | "owner": "yusdacra", 140 | "repo": "nix-cargo-integration", 141 | "type": "github" 142 | } 143 | }, 144 | "nixpkgs": { 145 | "locked": { 146 | "lastModified": 1651804312, 147 | "narHash": "sha256-DJxOGlxwQccuuwXUS0oRRkcNJbW5UP4fpsL5ga9ZwYw=", 148 | "owner": "nixos", 149 | "repo": "nixpkgs", 150 | "rev": "d59dd43e49f24b58fe8d5ded38cbdf00c3da4dc2", 151 | "type": "github" 152 | }, 153 | "original": { 154 | "owner": "nixos", 155 | "ref": "nixpkgs-unstable", 156 | "repo": "nixpkgs", 157 | "type": "github" 158 | } 159 | }, 160 | "root": { 161 | "inputs": { 162 | "flake-utils": "flake-utils", 163 | "nci": "nci", 164 | "nixpkgs": "nixpkgs" 165 | } 166 | }, 167 | "rustOverlay": { 168 | "flake": false, 169 | "locked": { 170 | "lastModified": 1652236937, 171 | "narHash": "sha256-anMSkIvaxB3jV74nTvPcE8fH7bZ5LPuc2wXGvt50Oe0=", 172 | "owner": "oxalica", 173 | "repo": "rust-overlay", 174 | "rev": "18c816d2d10317f4a8816925a12cb4bbdd0821de", 175 | "type": "github" 176 | }, 177 | "original": { 178 | "owner": "oxalica", 179 | "repo": "rust-overlay", 180 | "type": "github" 181 | } 182 | } 183 | }, 184 | "root": "root", 185 | "version": 7 186 | } 187 | -------------------------------------------------------------------------------- /haskell/.hlint.yaml: -------------------------------------------------------------------------------- 1 | - arguments: 2 | - "-XConstraintKinds" 3 | - "-XDeriveGeneric" 4 | - "-XGeneralizedNewtypeDeriving" 5 | - "-XLambdaCase" 6 | - "-XOverloadedStrings" 7 | - "-XRecordWildCards" 8 | - "-XScopedTypeVariables" 9 | - "-XStandaloneDeriving" 10 | - "-XTupleSections" 11 | - "-XTypeApplications" 12 | - "-XViewPatterns" 13 | - ignore: 14 | name: Use head 15 | - ignore: 16 | name: Use Foldable.forM_ 17 | - hint: 18 | lhs: "pure ()" 19 | note: "Use 'pass'" 20 | rhs: pass 21 | - hint: 22 | lhs: "return ()" 23 | note: "Use 'pass'" 24 | rhs: pass 25 | - hint: 26 | lhs: "(: [])" 27 | note: "Use `one`" 28 | rhs: one 29 | - hint: 30 | lhs: "(:| [])" 31 | note: "Use `one`" 32 | rhs: one 33 | - hint: 34 | lhs: Data.Sequence.singleton 35 | note: "Use `one`" 36 | rhs: one 37 | - hint: 38 | lhs: Data.Text.singleton 39 | note: "Use `one`" 40 | rhs: one 41 | - hint: 42 | lhs: Data.Text.Lazy.singleton 43 | note: "Use `one`" 44 | rhs: one 45 | - hint: 46 | lhs: Data.ByteString.singleton 47 | note: "Use `one`" 48 | rhs: one 49 | - hint: 50 | lhs: Data.ByteString.Lazy.singleton 51 | note: "Use `one`" 52 | rhs: one 53 | - hint: 54 | lhs: Data.Map.singleton 55 | note: "Use `one`" 56 | rhs: one 57 | - hint: 58 | lhs: Data.Map.Strict.singleton 59 | note: "Use `one`" 60 | rhs: one 61 | - hint: 62 | lhs: Data.HashMap.Strict.singleton 63 | note: "Use `one`" 64 | rhs: one 65 | - hint: 66 | lhs: Data.HashMap.Lazy.singleton 67 | note: "Use `one`" 68 | rhs: one 69 | - hint: 70 | lhs: Data.IntMap.singleton 71 | note: "Use `one`" 72 | rhs: one 73 | - hint: 74 | lhs: Data.IntMap.Strict.singleton 75 | note: "Use `one`" 76 | rhs: one 77 | - hint: 78 | lhs: Data.Set.singleton 79 | note: "Use `one`" 80 | rhs: one 81 | - hint: 82 | lhs: Data.HashSet.singleton 83 | note: "Use `one`" 84 | rhs: one 85 | - hint: 86 | lhs: Data.IntSet.singleton 87 | note: "Use `one`" 88 | rhs: one 89 | - warn: 90 | lhs: Control.Exception.evaluate 91 | rhs: evaluateWHNF 92 | - warn: 93 | lhs: "Control.Exception.evaluate (force x)" 94 | rhs: evaluateNF x 95 | - warn: 96 | lhs: "Control.Exception.evaluate (x `deepseq` ())" 97 | rhs: evaluateNF_ x 98 | - warn: 99 | lhs: "void (evaluateWHNF x)" 100 | rhs: evaluateWHNF_ x 101 | - warn: 102 | lhs: "void (evaluateNF x)" 103 | rhs: evaluateNF_ x 104 | - hint: 105 | lhs: Control.Exception.throw 106 | note: "Use 'impureThrow'" 107 | rhs: impureThrow 108 | - warn: 109 | lhs: Data.Text.IO.readFile 110 | rhs: readFileText 111 | - warn: 112 | lhs: Data.Text.IO.writeFile 113 | rhs: writeFileText 114 | - warn: 115 | lhs: Data.Text.IO.appendFile 116 | rhs: appendFileText 117 | - warn: 118 | lhs: Data.Text.Lazy.IO.readFile 119 | rhs: readFileLText 120 | - warn: 121 | lhs: Data.Text.Lazy.IO.writeFile 122 | rhs: writeFileLText 123 | - warn: 124 | lhs: Data.Text.Lazy.IO.appendFile 125 | rhs: appendFileLText 126 | - warn: 127 | lhs: Data.ByteString.readFile 128 | rhs: readFileBS 129 | - warn: 130 | lhs: Data.ByteString.writeFile 131 | rhs: writeFileBS 132 | - warn: 133 | lhs: Data.ByteString.appendFile 134 | rhs: appendFileBS 135 | - warn: 136 | lhs: Data.ByteString.Lazy.readFile 137 | rhs: readFileLBS 138 | - warn: 139 | lhs: Data.ByteString.Lazy.writeFile 140 | rhs: writeFileLBS 141 | - warn: 142 | lhs: Data.ByteString.Lazy.appendFile 143 | rhs: appendFileLBS 144 | - hint: 145 | lhs: "foldl' (flip f)" 146 | note: "Use 'flipfoldl''" 147 | rhs: "flipfoldl' f" 148 | - warn: 149 | lhs: "foldl' (+) 0" 150 | rhs: sum 151 | - warn: 152 | lhs: "foldl' (*) 1" 153 | rhs: product 154 | - hint: 155 | lhs: "fmap and (sequence s)" 156 | note: Applying this hint would mean that some actions that were being executed previously would no longer be executed. 157 | rhs: andM s 158 | - hint: 159 | lhs: "and <$> sequence s" 160 | note: Applying this hint would mean that some actions that were being executed previously would no longer be executed. 161 | rhs: andM s 162 | - hint: 163 | lhs: "fmap or (sequence s)" 164 | note: Applying this hint would mean that some actions that were being executed previously would no longer be executed. 165 | rhs: orM s 166 | - hint: 167 | lhs: "or <$> sequence s" 168 | note: Applying this hint would mean that some actions that were being executed previously would no longer be executed. 169 | rhs: orM s 170 | - hint: 171 | lhs: "fmap and (mapM f s)" 172 | note: Applying this hint would mean that some actions that were being executed previously would no longer be executed. 173 | rhs: allM f s 174 | - hint: 175 | lhs: "and <$> mapM f s" 176 | note: Applying this hint would mean that some actions that were being executed previously would no longer be executed. 177 | rhs: allM f s 178 | - hint: 179 | lhs: "fmap or (mapM f s)" 180 | note: Applying this hint would mean that some actions that were being executed previously would no longer be executed. 181 | rhs: anyM f s 182 | - hint: 183 | lhs: "or <$> mapM f s" 184 | note: Applying this hint would mean that some actions that were being executed previously would no longer be executed. 185 | rhs: anyM f s 186 | - warn: 187 | lhs: "getAlt (foldMap (Alt . f) xs)" 188 | rhs: asumMap xs 189 | - warn: 190 | lhs: "getAlt . foldMap (Alt . f)" 191 | rhs: asumMap 192 | - hint: 193 | lhs: "foldr (\\x acc -> f x <|> acc) empty" 194 | note: "Use 'asumMap'" 195 | rhs: asumMap f 196 | - hint: 197 | lhs: "asum (map f xs)" 198 | note: "Use 'asumMap'" 199 | rhs: asumMap f xs 200 | - warn: 201 | lhs: "map fst &&& map snd" 202 | rhs: unzip 203 | - hint: 204 | lhs: "fmap (fmap f) x" 205 | note: "Use '(<<$>>)'" 206 | rhs: "f <<$>> x" 207 | - hint: 208 | lhs: "(\\f -> f x) <$> ff" 209 | note: Use flap operator 210 | rhs: "ff ?? x" 211 | - hint: 212 | lhs: "fmap (\\f -> f x) ff" 213 | note: Use flap operator 214 | rhs: "ff ?? x" 215 | - hint: 216 | lhs: "fmap ($ x) ff" 217 | note: Use flap operator 218 | rhs: "ff ?? x" 219 | - hint: 220 | lhs: "($ x) <$> ff" 221 | note: Use flap operator 222 | rhs: "ff ?? x" 223 | - warn: 224 | lhs: "fmap f (nonEmpty x)" 225 | rhs: viaNonEmpty f x 226 | - warn: 227 | lhs: fmap f . nonEmpty 228 | rhs: viaNonEmpty f 229 | - warn: 230 | lhs: "f <$> nonEmpty x" 231 | rhs: viaNonEmpty f x 232 | - warn: 233 | lhs: partitionEithers . map f 234 | rhs: partitionWith f 235 | - warn: 236 | lhs: partitionEithers $ map f x 237 | rhs: partitionWith f x 238 | - warn: 239 | lhs: "f >>= guard" 240 | rhs: guardM f 241 | - warn: 242 | lhs: guard =<< f 243 | rhs: guardM f 244 | - warn: 245 | lhs: forever 246 | note: "'forever' is loosely typed and may hide errors" 247 | rhs: infinitely 248 | - warn: 249 | lhs: "whenM (not <$> x)" 250 | rhs: unlessM x 251 | - warn: 252 | lhs: "unlessM (not <$> x)" 253 | rhs: whenM x 254 | - warn: 255 | lhs: "either (const True) (const False)" 256 | rhs: isLeft 257 | - warn: 258 | lhs: "either (const False) (const True)" 259 | rhs: isRight 260 | - warn: 261 | lhs: "either id (const a)" 262 | rhs: fromLeft a 263 | - warn: 264 | lhs: "either (const b) id" 265 | rhs: fromRight b 266 | - warn: 267 | lhs: "either Just (const Nothing)" 268 | rhs: leftToMaybe 269 | - warn: 270 | lhs: "either (const Nothing) Just" 271 | rhs: rightToMaybe 272 | - warn: 273 | lhs: "maybe (Left l) Right" 274 | rhs: maybeToRight l 275 | - warn: 276 | lhs: "maybe (Right r) Left" 277 | rhs: maybeToLeft r 278 | - warn: 279 | lhs: "case m of Just x -> f x; Nothing -> pure ()" 280 | rhs: whenJust m f 281 | - warn: 282 | lhs: "case m of Just x -> f x; Nothing -> return ()" 283 | rhs: whenJust m f 284 | - warn: 285 | lhs: "case m of Just x -> f x; Nothing -> pass" 286 | rhs: whenJust m f 287 | - warn: 288 | lhs: "case m of Nothing -> pure () ; Just x -> f x" 289 | rhs: whenJust m f 290 | - warn: 291 | lhs: "case m of Nothing -> return (); Just x -> f x" 292 | rhs: whenJust m f 293 | - warn: 294 | lhs: "case m of Nothing -> pass ; Just x -> f x" 295 | rhs: whenJust m f 296 | - warn: 297 | lhs: "maybe (pure ()) f m" 298 | rhs: whenJust m f 299 | - warn: 300 | lhs: "maybe (return ()) f m" 301 | rhs: whenJust m f 302 | - warn: 303 | lhs: maybe pass f m 304 | rhs: whenJust m f 305 | - warn: 306 | lhs: "m >>= \\a -> whenJust a f" 307 | rhs: whenJustM m f 308 | - warn: 309 | lhs: "m >>= \\case Just x -> f x; Nothing -> pure ()" 310 | rhs: whenJustM m f 311 | - warn: 312 | lhs: "m >>= \\case Just x -> f x; Nothing -> return ()" 313 | rhs: whenJustM m f 314 | - warn: 315 | lhs: "m >>= \\case Just x -> f x; Nothing -> pass" 316 | rhs: whenJustM m f 317 | - warn: 318 | lhs: "m >>= \\case Nothing -> pure () ; Just x -> f x" 319 | rhs: whenJustM m f 320 | - warn: 321 | lhs: "m >>= \\case Nothing -> return (); Just x -> f x" 322 | rhs: whenJustM m f 323 | - warn: 324 | lhs: "m >>= \\case Nothing -> pass ; Just x -> f x" 325 | rhs: whenJustM m f 326 | - warn: 327 | lhs: "maybe (pure ()) f =<< m" 328 | rhs: whenJustM m f 329 | - warn: 330 | lhs: "maybe (return ()) f =<< m" 331 | rhs: whenJustM m f 332 | - warn: 333 | lhs: maybe pass f =<< m 334 | rhs: whenJustM m f 335 | - warn: 336 | lhs: "m >>= maybe (pure ()) f" 337 | rhs: whenJustM m f 338 | - warn: 339 | lhs: "m >>= maybe (return ()) f" 340 | rhs: whenJustM m f 341 | - warn: 342 | lhs: "m >>= maybe pass f" 343 | rhs: whenJustM m f 344 | - warn: 345 | lhs: "case m of Just _ -> pure () ; Nothing -> x" 346 | rhs: whenNothing_ m x 347 | - warn: 348 | lhs: "case m of Just _ -> return (); Nothing -> x" 349 | rhs: whenNothing_ m x 350 | - warn: 351 | lhs: "case m of Just _ -> pass ; Nothing -> x" 352 | rhs: whenNothing_ m x 353 | - warn: 354 | lhs: "case m of Nothing -> x; Just _ -> pure ()" 355 | rhs: whenNothing_ m x 356 | - warn: 357 | lhs: "case m of Nothing -> x; Just _ -> return ()" 358 | rhs: whenNothing_ m x 359 | - warn: 360 | lhs: "case m of Nothing -> x; Just _ -> pass" 361 | rhs: whenNothing_ m x 362 | - warn: 363 | lhs: "maybe x (\\_ -> pure () ) m" 364 | rhs: whenNothing_ m x 365 | - warn: 366 | lhs: "maybe x (\\_ -> return () ) m" 367 | rhs: whenNothing_ m x 368 | - warn: 369 | lhs: "maybe x (\\_ -> pass ) m" 370 | rhs: whenNothing_ m x 371 | - warn: 372 | lhs: "maybe x (const (pure () )) m" 373 | rhs: whenNothing_ m x 374 | - warn: 375 | lhs: "maybe x (const (return ())) m" 376 | rhs: whenNothing_ m x 377 | - warn: 378 | lhs: "maybe x (const pass) m" 379 | rhs: whenNothing_ m x 380 | - warn: 381 | lhs: "m >>= \\a -> whenNothing_ a x" 382 | rhs: whenNothingM_ m x 383 | - warn: 384 | lhs: "m >>= \\case Just _ -> pure () ; Nothing -> x" 385 | rhs: whenNothingM_ m x 386 | - warn: 387 | lhs: "m >>= \\case Just _ -> return (); Nothing -> x" 388 | rhs: whenNothingM_ m x 389 | - warn: 390 | lhs: "m >>= \\case Just _ -> pass ; Nothing -> x" 391 | rhs: whenNothingM_ m x 392 | - warn: 393 | lhs: "m >>= \\case Nothing -> x; Just _ -> pure ()" 394 | rhs: whenNothingM_ m x 395 | - warn: 396 | lhs: "m >>= \\case Nothing -> x; Just _ -> return ()" 397 | rhs: whenNothingM_ m x 398 | - warn: 399 | lhs: "m >>= \\case Nothing -> x; Just _ -> pass" 400 | rhs: whenNothingM_ m x 401 | - warn: 402 | lhs: "maybe x (\\_ -> pure () ) =<< m" 403 | rhs: whenNothingM_ m x 404 | - warn: 405 | lhs: "maybe x (\\_ -> return () ) =<< m" 406 | rhs: whenNothingM_ m x 407 | - warn: 408 | lhs: "maybe x (\\_ -> pass ) =<< m" 409 | rhs: whenNothingM_ m x 410 | - warn: 411 | lhs: "maybe x (const (pure () )) =<< m" 412 | rhs: whenNothingM_ m x 413 | - warn: 414 | lhs: "maybe x (const (return ())) =<< m" 415 | rhs: whenNothingM_ m x 416 | - warn: 417 | lhs: "maybe x (const pass) =<< m" 418 | rhs: whenNothingM_ m x 419 | - warn: 420 | lhs: "m >>= maybe x (\\_ -> pure ())" 421 | rhs: whenNothingM_ m x 422 | - warn: 423 | lhs: "m >>= maybe x (\\_ -> return ())" 424 | rhs: whenNothingM_ m x 425 | - warn: 426 | lhs: "m >>= maybe x (\\_ -> pass)" 427 | rhs: whenNothingM_ m x 428 | - warn: 429 | lhs: "m >>= maybe x (const (pure ()) )" 430 | rhs: whenNothingM_ m x 431 | - warn: 432 | lhs: "m >>= maybe x (const (return ()))" 433 | rhs: whenNothingM_ m x 434 | - warn: 435 | lhs: "m >>= maybe x (const pass)" 436 | rhs: whenNothingM_ m x 437 | - warn: 438 | lhs: "whenLeft ()" 439 | rhs: whenLeft_ 440 | - warn: 441 | lhs: "case m of Left x -> f x; Right _ -> pure ()" 442 | rhs: whenLeft_ m f 443 | - warn: 444 | lhs: "case m of Left x -> f x; Right _ -> return ()" 445 | rhs: whenLeft_ m f 446 | - warn: 447 | lhs: "case m of Left x -> f x; Right _ -> pass" 448 | rhs: whenLeft_ m f 449 | - warn: 450 | lhs: "case m of Right _ -> pure () ; Left x -> f x" 451 | rhs: whenLeft_ m f 452 | - warn: 453 | lhs: "case m of Right _ -> return (); Left x -> f x" 454 | rhs: whenLeft_ m f 455 | - warn: 456 | lhs: "case m of Right _ -> pass ; Left x -> f x" 457 | rhs: whenLeft_ m f 458 | - warn: 459 | lhs: "either f (\\_ -> pure () ) m" 460 | rhs: whenLeft_ m f 461 | - warn: 462 | lhs: "either f (\\_ -> return () ) m" 463 | rhs: whenLeft_ m f 464 | - warn: 465 | lhs: "either f (\\_ -> pass ) m" 466 | rhs: whenLeft_ m f 467 | - warn: 468 | lhs: "either f (const (pure () )) m" 469 | rhs: whenLeft_ m f 470 | - warn: 471 | lhs: "either f (const (return ())) m" 472 | rhs: whenLeft_ m f 473 | - warn: 474 | lhs: "either f (const pass) m" 475 | rhs: whenLeft_ m f 476 | - warn: 477 | lhs: "m >>= \\a -> whenLeft_ a f" 478 | rhs: whenLeftM_ m f 479 | - warn: 480 | lhs: "m >>= \\case Left x -> f x; Right _ -> pure ()" 481 | rhs: whenLeftM_ m f 482 | - warn: 483 | lhs: "m >>= \\case Left x -> f x; Right _ -> return ()" 484 | rhs: whenLeftM_ m f 485 | - warn: 486 | lhs: "m >>= \\case Left x -> f x; Right _ -> pass" 487 | rhs: whenLeftM_ m f 488 | - warn: 489 | lhs: "m >>= \\case Right _ -> pure () ; Left x -> f x" 490 | rhs: whenLeftM_ m f 491 | - warn: 492 | lhs: "m >>= \\case Right _ -> return (); Left x -> f x" 493 | rhs: whenLeftM_ m f 494 | - warn: 495 | lhs: "m >>= \\case Right _ -> pass ; Left x -> f x" 496 | rhs: whenLeftM_ m f 497 | - warn: 498 | lhs: "either f (\\_ -> pure () ) =<< m" 499 | rhs: whenLeftM_ m f 500 | - warn: 501 | lhs: "either f (\\_ -> return () ) =<< m" 502 | rhs: whenLeftM_ m f 503 | - warn: 504 | lhs: "either f (\\_ -> pass ) =<< m" 505 | rhs: whenLeftM_ m f 506 | - warn: 507 | lhs: "either f (const (pure () )) =<< m" 508 | rhs: whenLeftM_ m f 509 | - warn: 510 | lhs: "either f (const (return ())) =<< m" 511 | rhs: whenLeftM_ m f 512 | - warn: 513 | lhs: "either f (const pass) =<< m" 514 | rhs: whenLeftM_ m f 515 | - warn: 516 | lhs: "m >>= either f (\\_ -> pure ())" 517 | rhs: whenLeftM_ m f 518 | - warn: 519 | lhs: "m >>= either f (\\_ -> return ())" 520 | rhs: whenLeftM_ m f 521 | - warn: 522 | lhs: "m >>= either f (\\_ -> pass)" 523 | rhs: whenLeftM_ m f 524 | - warn: 525 | lhs: "m >>= either f (const (pure ()) )" 526 | rhs: whenLeftM_ m f 527 | - warn: 528 | lhs: "m >>= either f (const (return ()))" 529 | rhs: whenLeftM_ m f 530 | - warn: 531 | lhs: "m >>= either f (const pass)" 532 | rhs: whenLeftM_ m f 533 | - warn: 534 | lhs: "whenRight ()" 535 | rhs: whenRight_ 536 | - warn: 537 | lhs: "case m of Right x -> f x; Left _ -> pure ()" 538 | rhs: whenRight_ m f 539 | - warn: 540 | lhs: "case m of Right x -> f x; Left _ -> return ()" 541 | rhs: whenRight_ m f 542 | - warn: 543 | lhs: "case m of Right x -> f x; Left _ -> pass" 544 | rhs: whenRight_ m f 545 | - warn: 546 | lhs: "case m of Left _ -> pure () ; Right x -> f x" 547 | rhs: whenRight_ m f 548 | - warn: 549 | lhs: "case m of Left _ -> return (); Right x -> f x" 550 | rhs: whenRight_ m f 551 | - warn: 552 | lhs: "case m of Left _ -> pass ; Right x -> f x" 553 | rhs: whenRight_ m f 554 | - warn: 555 | lhs: "either (\\_ -> pure () ) f m" 556 | rhs: whenRight_ m f 557 | - warn: 558 | lhs: "either (\\_ -> return () ) f m" 559 | rhs: whenRight_ m f 560 | - warn: 561 | lhs: "either (\\_ -> pass ) f m" 562 | rhs: whenRight_ m f 563 | - warn: 564 | lhs: "either (const (pure () )) f m" 565 | rhs: whenRight_ m f 566 | - warn: 567 | lhs: "either (const (return ())) f m" 568 | rhs: whenRight_ m f 569 | - warn: 570 | lhs: "either (const pass) f m" 571 | rhs: whenRight_ m f 572 | - warn: 573 | lhs: "m >>= \\a -> whenRight_ a f" 574 | rhs: whenRightM_ m f 575 | - warn: 576 | lhs: "m >>= \\case Right x -> f x; Left _ -> pure () " 577 | rhs: whenRightM_ m f 578 | - warn: 579 | lhs: "m >>= \\case Right x -> f x; Left _ -> return ()" 580 | rhs: whenRightM_ m f 581 | - warn: 582 | lhs: "m >>= \\case Right x -> f x; Left _ -> pass" 583 | rhs: whenRightM_ m f 584 | - warn: 585 | lhs: "m >>= \\case Left _ -> pure () ; Right x -> f x" 586 | rhs: whenRightM_ m f 587 | - warn: 588 | lhs: "m >>= \\case Left _ -> return (); Right x -> f x" 589 | rhs: whenRightM_ m f 590 | - warn: 591 | lhs: "m >>= \\case Left _ -> pass ; Right x -> f x" 592 | rhs: whenRightM_ m f 593 | - warn: 594 | lhs: "either (\\_ -> pure () ) f =<< m" 595 | rhs: whenRightM_ m f 596 | - warn: 597 | lhs: "either (\\_ -> return () ) f =<< m" 598 | rhs: whenRightM_ m f 599 | - warn: 600 | lhs: "either (\\_ -> pass ) f =<< m" 601 | rhs: whenRightM_ m f 602 | - warn: 603 | lhs: "either (const (pure () )) f =<< m" 604 | rhs: whenRightM_ m f 605 | - warn: 606 | lhs: "either (const (return ())) f =<< m" 607 | rhs: whenRightM_ m f 608 | - warn: 609 | lhs: "either (const pass) f =<< m" 610 | rhs: whenRightM_ m f 611 | - warn: 612 | lhs: "m >>= either (\\_ -> pure ()) f" 613 | rhs: whenRightM_ m f 614 | - warn: 615 | lhs: "m >>= either (\\_ -> return ()) f" 616 | rhs: whenRightM_ m f 617 | - warn: 618 | lhs: "m >>= either (\\_ -> pass) f" 619 | rhs: whenRightM_ m f 620 | - warn: 621 | lhs: "m >>= either (const (pure ()) ) f" 622 | rhs: whenRightM_ m f 623 | - warn: 624 | lhs: "m >>= either (const (return ())) f" 625 | rhs: whenRightM_ m f 626 | - warn: 627 | lhs: "m >>= either (const pass) f" 628 | rhs: whenRightM_ m f 629 | - warn: 630 | lhs: "case m of Left x -> f x; Right _ -> pure d " 631 | rhs: whenLeft d m f 632 | - warn: 633 | lhs: "case m of Left x -> f x; Right _ -> return d" 634 | rhs: whenLeft d m f 635 | - warn: 636 | lhs: "case m of Right _ -> pure d ; Left x -> f x" 637 | rhs: whenLeft d m f 638 | - warn: 639 | lhs: "case m of Right _ -> return d; Left x -> f x" 640 | rhs: whenLeft d m f 641 | - warn: 642 | lhs: "either f (\\_ -> pure d ) m" 643 | rhs: whenLeft d m f 644 | - warn: 645 | lhs: "either f (\\_ -> return d ) m" 646 | rhs: whenLeft d m f 647 | - warn: 648 | lhs: "either f (const (pure d )) m" 649 | rhs: whenLeft d m f 650 | - warn: 651 | lhs: "either f (const (return d)) m" 652 | rhs: whenLeft d m f 653 | - warn: 654 | lhs: "m >>= \\a -> whenLeft d a f" 655 | rhs: whenLeftM d m f 656 | - warn: 657 | lhs: "m >>= \\case Left x -> f x; Right _ -> pure d" 658 | rhs: whenLeftM d m f 659 | - warn: 660 | lhs: "m >>= \\case Left x -> f x; Right _ -> return d" 661 | rhs: whenLeftM d m f 662 | - warn: 663 | lhs: "m >>= \\case Right _ -> pure d ; Left x -> f x" 664 | rhs: whenLeftM d m f 665 | - warn: 666 | lhs: "m >>= \\case Right _ -> return d; Left x -> f x" 667 | rhs: whenLeftM d m f 668 | - warn: 669 | lhs: "either f (\\_ -> pure d ) =<< m" 670 | rhs: whenLeftM d m f 671 | - warn: 672 | lhs: "either f (\\_ -> return d ) =<< m" 673 | rhs: whenLeftM d m f 674 | - warn: 675 | lhs: "either f (const (pure d )) =<< m" 676 | rhs: whenLeftM d m f 677 | - warn: 678 | lhs: "either f (const (return d)) =<< m" 679 | rhs: whenLeftM d m f 680 | - warn: 681 | lhs: "m >>= either f (\\_ -> pure d)" 682 | rhs: whenLeftM d m f 683 | - warn: 684 | lhs: "m >>= either f (\\_ -> return d)" 685 | rhs: whenLeftM d m f 686 | - warn: 687 | lhs: "m >>= either f (const (pure d))" 688 | rhs: whenLeftM d m f 689 | - warn: 690 | lhs: "m >>= either f (const (return d))" 691 | rhs: whenLeftM d m f 692 | - warn: 693 | lhs: "case m of Right x -> f x; Left _ -> pure d" 694 | rhs: whenRight d m f 695 | - warn: 696 | lhs: "case m of Right x -> f x; Left _ -> return d" 697 | rhs: whenRight d m f 698 | - warn: 699 | lhs: "case m of Left _ -> pure d ; Right x -> f x" 700 | rhs: whenRight d m f 701 | - warn: 702 | lhs: "case m of Left _ -> return d; Right x -> f x" 703 | rhs: whenRight d m f 704 | - warn: 705 | lhs: "either (\\_ -> pure d ) f m" 706 | rhs: whenRight d m f 707 | - warn: 708 | lhs: "either (\\_ -> return d ) f m" 709 | rhs: whenRight d m f 710 | - warn: 711 | lhs: "either (const (pure d )) f m" 712 | rhs: whenRight d m f 713 | - warn: 714 | lhs: "either (const (return d)) f m" 715 | rhs: whenRight d m f 716 | - warn: 717 | lhs: "m >>= \\a -> whenRight d a f" 718 | rhs: whenRightM d m f 719 | - warn: 720 | lhs: "m >>= \\case Right x -> f x; Left _ -> pure d" 721 | rhs: whenRightM d m f 722 | - warn: 723 | lhs: "m >>= \\case Right x -> f x; Left _ -> return d" 724 | rhs: whenRightM d m f 725 | - warn: 726 | lhs: "m >>= \\case Left _ -> pure d ; Right x -> f x" 727 | rhs: whenRightM d m f 728 | - warn: 729 | lhs: "m >>= \\case Left _ -> return d; Right x -> f x" 730 | rhs: whenRightM d m f 731 | - warn: 732 | lhs: "either (\\_ -> pure d ) f =<< m" 733 | rhs: whenRightM d m f 734 | - warn: 735 | lhs: "either (\\_ -> return d ) f =<< m" 736 | rhs: whenRightM d m f 737 | - warn: 738 | lhs: "either (const (pure d )) f =<< m" 739 | rhs: whenRightM d m f 740 | - warn: 741 | lhs: "either (const (return d)) f =<< m" 742 | rhs: whenRightM d m f 743 | - warn: 744 | lhs: "m >>= either (\\_ -> pure d) f" 745 | rhs: whenRightM d m f 746 | - warn: 747 | lhs: "m >>= either (\\_ -> return d) f" 748 | rhs: whenRightM d m f 749 | - warn: 750 | lhs: "m >>= either (const (pure d) ) f" 751 | rhs: whenRightM d m f 752 | - warn: 753 | lhs: "m >>= either (const (return d)) f" 754 | rhs: whenRightM d m f 755 | - warn: 756 | lhs: "case m of [] -> return (); (x:xs) -> f (x :| xs)" 757 | rhs: whenNotNull m f 758 | - warn: 759 | lhs: "case m of [] -> pure () ; (x:xs) -> f (x :| xs)" 760 | rhs: whenNotNull m f 761 | - warn: 762 | lhs: "case m of [] -> pass ; (x:xs) -> f (x :| xs)" 763 | rhs: whenNotNull m f 764 | - warn: 765 | lhs: "case m of (x:xs) -> f (x :| xs); [] -> return ()" 766 | rhs: whenNotNull m f 767 | - warn: 768 | lhs: "case m of (x:xs) -> f (x :| xs); [] -> pure () " 769 | rhs: whenNotNull m f 770 | - warn: 771 | lhs: "case m of (x:xs) -> f (x :| xs); [] -> pass " 772 | rhs: whenNotNull m f 773 | - warn: 774 | lhs: "m >>= \\case [] -> pass ; (x:xs) -> f (x :| xs)" 775 | rhs: whenNotNullM m f 776 | - warn: 777 | lhs: "m >>= \\case [] -> pure () ; (x:xs) -> f (x :| xs)" 778 | rhs: whenNotNullM m f 779 | - warn: 780 | lhs: "m >>= \\case [] -> return (); (x:xs) -> f (x :| xs)" 781 | rhs: whenNotNullM m f 782 | - warn: 783 | lhs: "m >>= \\case (x:xs) -> f (x :| xs); [] -> pass " 784 | rhs: whenNotNullM m f 785 | - warn: 786 | lhs: "m >>= \\case (x:xs) -> f (x :| xs); [] -> pure () " 787 | rhs: whenNotNullM m f 788 | - warn: 789 | lhs: "m >>= \\case (x:xs) -> f (x :| xs); [] -> return ()" 790 | rhs: whenNotNullM m f 791 | - warn: 792 | lhs: mapMaybe leftToMaybe 793 | rhs: lefts 794 | - warn: 795 | lhs: mapMaybe rightToMaybe 796 | rhs: rights 797 | - warn: 798 | lhs: flip runReaderT 799 | rhs: usingReaderT 800 | - warn: 801 | lhs: flip runReader 802 | rhs: usingReader 803 | - warn: 804 | lhs: flip runStateT 805 | rhs: usingStateT 806 | - warn: 807 | lhs: flip runState 808 | rhs: usingState 809 | - warn: 810 | lhs: "fst <$> usingStateT s st" 811 | rhs: evaluatingStateT s st 812 | - warn: 813 | lhs: "fst (usingState s st)" 814 | rhs: evaluatingState s st 815 | - warn: 816 | lhs: "snd <$> usingStateT s st" 817 | rhs: executingStateT s st 818 | - warn: 819 | lhs: "snd (usingState s st)" 820 | rhs: executingState s st 821 | - warn: 822 | lhs: "MaybeT (pure m)" 823 | rhs: hoistMaybe m 824 | - warn: 825 | lhs: "MaybeT (return m)" 826 | rhs: hoistMaybe m 827 | - warn: 828 | lhs: MaybeT . pure 829 | rhs: hoistMaybe 830 | - warn: 831 | lhs: MaybeT . return 832 | rhs: hoistMaybe 833 | - warn: 834 | lhs: "ExceptT (pure m)" 835 | rhs: hoistEither m 836 | - warn: 837 | lhs: "ExceptT (return m)" 838 | rhs: hoistEither m 839 | - warn: 840 | lhs: ExceptT . pure 841 | rhs: hoistEither 842 | - warn: 843 | lhs: ExceptT . return 844 | rhs: hoistEither 845 | - warn: 846 | lhs: fromMaybe mempty 847 | rhs: maybeToMonoid 848 | - warn: 849 | lhs: "m ?: mempty" 850 | rhs: maybeToMonoid m 851 | - warn: 852 | lhs: "Data.Map.toAscList (Data.Map.fromList x)" 853 | rhs: sortWith fst x 854 | - warn: 855 | lhs: "Data.Map.toDescList (Data.Map.fromList x)" 856 | rhs: "sortWith (Down . fst) x" 857 | - warn: 858 | lhs: "Data.Set.toList (Data.Set.fromList l)" 859 | rhs: sortNub l 860 | - warn: 861 | lhs: "Data.Set.assocs (Data.Set.fromList l)" 862 | rhs: sortNub l 863 | - warn: 864 | lhs: "Data.Set.toAscList (Data.Set.fromList l)" 865 | rhs: sortNub l 866 | - warn: 867 | lhs: "Data.HashSet.toList (Data.HashSet.fromList l)" 868 | rhs: unstableNub l 869 | - warn: 870 | lhs: nub 871 | note: "'nub' is O(n^2), 'ordNub' is O(n log n)" 872 | rhs: ordNub 873 | - warn: 874 | lhs: "sortBy (comparing f)" 875 | note: "If the function you are using for 'comparing' is slow, use 'sortOn' instead of 'sortWith', because 'sortOn' caches applications the function and 'sortWith' doesn't." 876 | rhs: sortWith f 877 | - warn: 878 | lhs: sortOn fst 879 | note: "'sortWith' will be faster here because it doesn't do caching" 880 | rhs: sortWith fst 881 | - warn: 882 | lhs: sortOn snd 883 | note: "'sortWith' will be faster here because it doesn't do caching" 884 | rhs: sortWith snd 885 | - warn: 886 | lhs: "sortOn (Down . fst)" 887 | note: "'sortWith' will be faster here because it doesn't do caching" 888 | rhs: "sortWith (Down . fst)" 889 | - warn: 890 | lhs: "sortOn (Down . snd)" 891 | note: "'sortWith' will be faster here because it doesn't do caching" 892 | rhs: "sortWith (Down . snd)" 893 | - warn: 894 | lhs: Data.Text.IO.putStr 895 | rhs: putText 896 | - warn: 897 | lhs: Data.Text.IO.putStrLn 898 | rhs: putTextLn 899 | - warn: 900 | lhs: Data.Text.Lazy.IO.putStr 901 | rhs: putLText 902 | - warn: 903 | lhs: Data.Text.Lazy.IO.putStrLn 904 | rhs: putLTextLn 905 | - warn: 906 | lhs: Data.ByteString.Char8.putStr 907 | rhs: putBS 908 | - warn: 909 | lhs: Data.ByteString.Char8.putStrLn 910 | rhs: putBSLn 911 | - warn: 912 | lhs: Data.ByteString.Lazy.Char8.putStr 913 | rhs: putLBS 914 | - warn: 915 | lhs: Data.ByteString.Lazy.Char8.putStrLn 916 | rhs: putLBSLn 917 | - warn: 918 | lhs: Data.Text.Lazy.Text 919 | rhs: LText 920 | - warn: 921 | lhs: Data.ByteString.Lazy.ByteString 922 | rhs: LByteString 923 | - warn: 924 | lhs: Data.ByteString.UTF8.fromString 925 | rhs: encodeUtf8 926 | - warn: 927 | lhs: Data.ByteString.UTF8.toString 928 | rhs: decodeUtf8 929 | - warn: 930 | lhs: Data.Text.Encoding.encodeUtf8 931 | rhs: encodeUtf8 932 | - warn: 933 | lhs: Data.Text.Encoding.decodeUtf8 934 | rhs: decodeUtf8 935 | - warn: 936 | lhs: "Data.ByteString.Lazy.toStrict (encodeUtf8 x)" 937 | rhs: encodeUtf8 x 938 | - warn: 939 | lhs: "toStrict (encodeUtf8 x)" 940 | rhs: encodeUtf8 x 941 | - warn: 942 | lhs: "decodeUtf8 (Data.ByteString.Lazy.fromStrict x)" 943 | rhs: decodeUtf8 x 944 | - warn: 945 | lhs: "decodeUtf8 (fromStrict x)" 946 | rhs: decodeUtf8 x 947 | - warn: 948 | lhs: Data.ByteString.Lazy.UTF8.fromString 949 | rhs: encodeUtf8 950 | - warn: 951 | lhs: Data.ByteString.Lazy.UTF8.toString 952 | rhs: decodeUtf8 953 | - warn: 954 | lhs: "Data.ByteString.Lazy.fromStrict (Data.Text.Encoding.encodeUtf8 x)" 955 | rhs: encodeUtf8 x 956 | - warn: 957 | lhs: "Data.ByteString.Lazy.fromStrict (encodeUtf8 x)" 958 | rhs: encodeUtf8 x 959 | - warn: 960 | lhs: "Data.Text.Encoding.decodeUtf8 (Data.ByteString.Lazy.toStrict x)" 961 | rhs: decodeUtf8 x 962 | - warn: 963 | lhs: "Data.Text.Encoding.decodeUtf8 (toStrict x)" 964 | rhs: decodeUtf8 x 965 | - warn: 966 | lhs: "decodeUtf8 (Data.ByteString.Lazy.toStrict x)" 967 | rhs: decodeUtf8 x 968 | - warn: 969 | lhs: "decodeUtf8 (toStrict x)" 970 | rhs: decodeUtf8 x 971 | - warn: 972 | lhs: Data.Text.pack 973 | rhs: toText 974 | - warn: 975 | lhs: Data.Text.unpack 976 | rhs: toString 977 | - warn: 978 | lhs: Data.Text.Lazy.pack 979 | rhs: toLText 980 | - warn: 981 | lhs: Data.Text.Lazy.unpack 982 | rhs: toString 983 | - warn: 984 | lhs: Data.Text.Lazy.toStrict 985 | rhs: toText 986 | - warn: 987 | lhs: Data.Text.Lazy.fromStrict 988 | rhs: toLText 989 | - warn: 990 | lhs: "Data.Text.pack (show x)" 991 | rhs: show x 992 | - warn: 993 | lhs: "Data.Text.Lazy.pack (show x)" 994 | rhs: show x 995 | - warn: 996 | lhs: Data.ByteString.Lazy.fromStrict 997 | rhs: fromStrict 998 | - warn: 999 | lhs: Data.ByteString.Lazy.toStrict 1000 | rhs: toStrict 1001 | - warn: 1002 | lhs: Data.Text.Lazy.fromStrict 1003 | rhs: fromStrict 1004 | - warn: 1005 | lhs: Data.Text.Lazy.toStrict 1006 | rhs: toStrict 1007 | - warn: 1008 | lhs: Control.Applicative.Alternative 1009 | name: "Use 'Alternative' from Relude" 1010 | note: "'Alternative' is already exported from Relude" 1011 | rhs: Alternative 1012 | - warn: 1013 | lhs: Control.Applicative.empty 1014 | name: "Use 'empty' from Relude" 1015 | note: "'empty' is already exported from Relude" 1016 | rhs: empty 1017 | - warn: 1018 | lhs: "(Control.Applicative.<|>)" 1019 | name: "Use '<|>' from Relude" 1020 | note: "Operator '(<|>)' is already exported from Relude" 1021 | rhs: "(<|>)" 1022 | - warn: 1023 | lhs: Control.Applicative.some 1024 | name: "Use 'some' from Relude" 1025 | note: "'some' is already exported from Relude" 1026 | rhs: some 1027 | - warn: 1028 | lhs: Control.Applicative.many 1029 | name: "Use 'many' from Relude" 1030 | note: "'many' is already exported from Relude" 1031 | rhs: many 1032 | - warn: 1033 | lhs: Control.Applicative.Const 1034 | name: "Use 'Const' from Relude" 1035 | note: "'Const' is already exported from Relude" 1036 | rhs: Const 1037 | - warn: 1038 | lhs: Control.Applicative.getConst 1039 | name: "Use 'getConst' from Relude" 1040 | note: "'getConst' is already exported from Relude" 1041 | rhs: getConst 1042 | - warn: 1043 | lhs: Control.Applicative.ZipList 1044 | name: "Use 'ZipList' from Relude" 1045 | note: "'ZipList' is already exported from Relude" 1046 | rhs: ZipList 1047 | - warn: 1048 | lhs: Control.Applicative.getZipList 1049 | name: "Use 'getZipList' from Relude" 1050 | note: "'getZipList' is already exported from Relude" 1051 | rhs: getZipList 1052 | - warn: 1053 | lhs: Control.Applicative.liftA2 1054 | name: "Use 'liftA2' from Relude" 1055 | note: "'liftA2' is already exported from Relude" 1056 | rhs: liftA2 1057 | - warn: 1058 | lhs: Control.Applicative.liftA3 1059 | name: "Use 'liftA3' from Relude" 1060 | note: "'liftA3' is already exported from Relude" 1061 | rhs: liftA3 1062 | - warn: 1063 | lhs: Control.Applicative.optional 1064 | name: "Use 'optional' from Relude" 1065 | note: "'optional' is already exported from Relude" 1066 | rhs: optional 1067 | - warn: 1068 | lhs: "(Control.Applicative.<**>)" 1069 | name: "Use '<**>' from Relude" 1070 | note: "Operator '(<**>)' is already exported from Relude" 1071 | rhs: "(<**>)" 1072 | - warn: 1073 | lhs: Data.Bits.xor 1074 | name: "Use 'xor' from Relude" 1075 | note: "'xor' is already exported from Relude" 1076 | rhs: xor 1077 | - warn: 1078 | lhs: Data.Char.chr 1079 | name: "Use 'chr' from Relude" 1080 | note: "'chr' is already exported from Relude" 1081 | rhs: chr 1082 | - warn: 1083 | lhs: Data.Int.Int8 1084 | name: "Use 'Int8' from Relude" 1085 | note: "'Int8' is already exported from Relude" 1086 | rhs: Int8 1087 | - warn: 1088 | lhs: Data.Int.Int16 1089 | name: "Use 'Int16' from Relude" 1090 | note: "'Int16' is already exported from Relude" 1091 | rhs: Int16 1092 | - warn: 1093 | lhs: Data.Int.Int32 1094 | name: "Use 'Int32' from Relude" 1095 | note: "'Int32' is already exported from Relude" 1096 | rhs: Int32 1097 | - warn: 1098 | lhs: Data.Int.Int64 1099 | name: "Use 'Int64' from Relude" 1100 | note: "'Int64' is already exported from Relude" 1101 | rhs: Int64 1102 | - warn: 1103 | lhs: Data.Word.Word8 1104 | name: "Use 'Word8' from Relude" 1105 | note: "'Word8' is already exported from Relude" 1106 | rhs: Word8 1107 | - warn: 1108 | lhs: Data.Word.Word16 1109 | name: "Use 'Word16' from Relude" 1110 | note: "'Word16' is already exported from Relude" 1111 | rhs: Word16 1112 | - warn: 1113 | lhs: Data.Word.Word32 1114 | name: "Use 'Word32' from Relude" 1115 | note: "'Word32' is already exported from Relude" 1116 | rhs: Word32 1117 | - warn: 1118 | lhs: Data.Word.Word64 1119 | name: "Use 'Word64' from Relude" 1120 | note: "'Word64' is already exported from Relude" 1121 | rhs: Word64 1122 | - warn: 1123 | lhs: Data.Word.byteSwap16 1124 | name: "Use 'byteSwap16' from Relude" 1125 | note: "'byteSwap16' is already exported from Relude" 1126 | rhs: byteSwap16 1127 | - warn: 1128 | lhs: Data.Word.byteSwap32 1129 | name: "Use 'byteSwap32' from Relude" 1130 | note: "'byteSwap32' is already exported from Relude" 1131 | rhs: byteSwap32 1132 | - warn: 1133 | lhs: Data.Word.byteSwap64 1134 | name: "Use 'byteSwap64' from Relude" 1135 | note: "'byteSwap64' is already exported from Relude" 1136 | rhs: byteSwap64 1137 | - warn: 1138 | lhs: Numeric.Natural.Natural 1139 | name: "Use 'Natural' from Relude" 1140 | note: "'Natural' is already exported from Relude" 1141 | rhs: Natural 1142 | - warn: 1143 | lhs: System.IO.IOMode 1144 | name: "Use 'IOMode' from Relude" 1145 | note: "'IOMode' is already exported from Relude" 1146 | rhs: IOMode 1147 | - warn: 1148 | lhs: System.IO.ReadMode 1149 | name: "Use 'ReadMode' from Relude" 1150 | note: "'ReadMode' is already exported from Relude" 1151 | rhs: ReadMode 1152 | - warn: 1153 | lhs: System.IO.WriteMode 1154 | name: "Use 'WriteMode' from Relude" 1155 | note: "'WriteMode' is already exported from Relude" 1156 | rhs: WriteMode 1157 | - warn: 1158 | lhs: System.IO.AppendMode 1159 | name: "Use 'AppendMode' from Relude" 1160 | note: "'AppendMode' is already exported from Relude" 1161 | rhs: AppendMode 1162 | - warn: 1163 | lhs: System.IO.ReadWriteMode 1164 | name: "Use 'ReadWriteMode' from Relude" 1165 | note: "'ReadWriteMode' is already exported from Relude" 1166 | rhs: ReadWriteMode 1167 | - warn: 1168 | lhs: Data.Ord.Down 1169 | name: "Use 'Down' from Relude" 1170 | note: "'Down' is already exported from Relude" 1171 | rhs: Down 1172 | - warn: 1173 | lhs: Data.Ord.comparing 1174 | name: "Use 'comparing' from Relude" 1175 | note: "'comparing' is already exported from Relude" 1176 | rhs: comparing 1177 | - warn: 1178 | lhs: Data.Coerce.Coercible 1179 | name: "Use 'Coercible' from Relude" 1180 | note: "'Coercible' is already exported from Relude" 1181 | rhs: Coercible 1182 | - warn: 1183 | lhs: Data.Coerce.coerce 1184 | name: "Use 'coerce' from Relude" 1185 | note: "'coerce' is already exported from Relude" 1186 | rhs: coerce 1187 | - warn: 1188 | lhs: Data.Kind.Constraint 1189 | name: "Use 'Constraint' from Relude" 1190 | note: "'Constraint' is already exported from Relude" 1191 | rhs: Constraint 1192 | - warn: 1193 | lhs: Data.Kind.Type 1194 | name: "Use 'Type' from Relude" 1195 | note: "'Type' is already exported from Relude" 1196 | rhs: Type 1197 | - warn: 1198 | lhs: Data.Typeable.Typeable 1199 | name: "Use 'Typeable' from Relude" 1200 | note: "'Typeable' is already exported from Relude" 1201 | rhs: Typeable 1202 | - warn: 1203 | lhs: Data.Proxy.Proxy 1204 | name: "Use 'Proxy' from Relude" 1205 | note: "'Proxy' is already exported from Relude" 1206 | rhs: Proxy 1207 | - warn: 1208 | lhs: Data.Typeable.Typeable 1209 | name: "Use 'Typeable' from Relude" 1210 | note: "'Typeable' is already exported from Relude" 1211 | rhs: Typeable 1212 | - warn: 1213 | lhs: Data.Void.Void 1214 | name: "Use 'Void' from Relude" 1215 | note: "'Void' is already exported from Relude" 1216 | rhs: Void 1217 | - warn: 1218 | lhs: Data.Void.absurd 1219 | name: "Use 'absurd' from Relude" 1220 | note: "'absurd' is already exported from Relude" 1221 | rhs: absurd 1222 | - warn: 1223 | lhs: Data.Void.vacuous 1224 | name: "Use 'vacuous' from Relude" 1225 | note: "'vacuous' is already exported from Relude" 1226 | rhs: vacuous 1227 | - warn: 1228 | lhs: Data.Base.maxInt 1229 | name: "Use 'maxInt' from Relude" 1230 | note: "'maxInt' is already exported from Relude" 1231 | rhs: maxInt 1232 | - warn: 1233 | lhs: Data.Base.minInt 1234 | name: "Use 'minInt' from Relude" 1235 | note: "'minInt' is already exported from Relude" 1236 | rhs: minInt 1237 | - warn: 1238 | lhs: Data.Base.ord 1239 | name: "Use 'ord' from Relude" 1240 | note: "'ord' is already exported from Relude" 1241 | rhs: ord 1242 | - warn: 1243 | lhs: GHC.Enum.boundedEnumFrom 1244 | name: "Use 'boundedEnumFrom' from Relude" 1245 | note: "'boundedEnumFrom' is already exported from Relude" 1246 | rhs: boundedEnumFrom 1247 | - warn: 1248 | lhs: GHC.Enum.boundedEnumFromThen 1249 | name: "Use 'boundedEnumFromThen' from Relude" 1250 | note: "'boundedEnumFromThen' is already exported from Relude" 1251 | rhs: boundedEnumFromThen 1252 | - warn: 1253 | lhs: GHC.Generics.Generic 1254 | name: "Use 'Generic' from Relude" 1255 | note: "'Generic' is already exported from Relude" 1256 | rhs: Generic 1257 | - warn: 1258 | lhs: GHC.Real.Ratio 1259 | name: "Use 'Ratio' from Relude" 1260 | note: "'Ratio' is already exported from Relude" 1261 | rhs: Ratio 1262 | - warn: 1263 | lhs: GHC.Real.Rational 1264 | name: "Use 'Rational' from Relude" 1265 | note: "'Rational' is already exported from Relude" 1266 | rhs: Rational 1267 | - warn: 1268 | lhs: GHC.Real.denominator 1269 | name: "Use 'denominator' from Relude" 1270 | note: "'denominator' is already exported from Relude" 1271 | rhs: denominator 1272 | - warn: 1273 | lhs: GHC.Real.numerator 1274 | name: "Use 'numerator' from Relude" 1275 | note: "'numerator' is already exported from Relude" 1276 | rhs: numerator 1277 | - warn: 1278 | lhs: GHC.TypeNats.CmpNat 1279 | name: "Use 'CmpNat' from Relude" 1280 | note: "'CmpNat' is already exported from Relude" 1281 | rhs: CmpNat 1282 | - warn: 1283 | lhs: GHC.TypeNats.KnownNat 1284 | name: "Use 'KnownNat' from Relude" 1285 | note: "'KnownNat' is already exported from Relude" 1286 | rhs: KnownNat 1287 | - warn: 1288 | lhs: GHC.TypeNats.Nat 1289 | name: "Use 'Nat' from Relude" 1290 | note: "'Nat' is already exported from Relude" 1291 | rhs: Nat 1292 | - warn: 1293 | lhs: GHC.TypeNats.SomeNat 1294 | name: "Use 'SomeNat' from Relude" 1295 | note: "'SomeNat' is already exported from Relude" 1296 | rhs: SomeNat 1297 | - warn: 1298 | lhs: GHC.TypeNats.natVal 1299 | name: "Use 'natVal' from Relude" 1300 | note: "'natVal' is already exported from Relude" 1301 | rhs: natVal 1302 | - warn: 1303 | lhs: GHC.TypeNats.someNatVal 1304 | name: "Use 'someNatVal' from Relude" 1305 | note: "'someNatVal' is already exported from Relude" 1306 | rhs: someNatVal 1307 | - warn: 1308 | lhs: GHC.TypeLits.CmpNat 1309 | name: "Use 'CmpNat' from Relude" 1310 | note: "'CmpNat' is already exported from Relude" 1311 | rhs: CmpNat 1312 | - warn: 1313 | lhs: GHC.TypeLits.KnownNat 1314 | name: "Use 'KnownNat' from Relude" 1315 | note: "'KnownNat' is already exported from Relude" 1316 | rhs: KnownNat 1317 | - warn: 1318 | lhs: GHC.TypeLits.Nat 1319 | name: "Use 'Nat' from Relude" 1320 | note: "'Nat' is already exported from Relude" 1321 | rhs: Nat 1322 | - warn: 1323 | lhs: GHC.TypeLits.SomeNat 1324 | name: "Use 'SomeNat' from Relude" 1325 | note: "'SomeNat' is already exported from Relude" 1326 | rhs: SomeNat 1327 | - warn: 1328 | lhs: GHC.TypeLits.natVal 1329 | name: "Use 'natVal' from Relude" 1330 | note: "'natVal' is already exported from Relude" 1331 | rhs: natVal 1332 | - warn: 1333 | lhs: GHC.TypeLits.someNatVal 1334 | name: "Use 'someNatVal' from Relude" 1335 | note: "'someNatVal' is already exported from Relude" 1336 | rhs: someNatVal 1337 | - warn: 1338 | lhs: GHC.ExecutionStack.getStackTrace 1339 | name: "Use 'getStackTrace' from Relude" 1340 | note: "'getStackTrace' is already exported from Relude" 1341 | rhs: getStackTrace 1342 | - warn: 1343 | lhs: GHC.ExecutionStack.showStackTrace 1344 | name: "Use 'showStackTrace' from Relude" 1345 | note: "'showStackTrace' is already exported from Relude" 1346 | rhs: showStackTrace 1347 | - warn: 1348 | lhs: GHC.OverloadedLabels.IsLabel 1349 | name: "Use 'IsLabel' from Relude" 1350 | note: "'IsLabel' is already exported from Relude" 1351 | rhs: IsLabel 1352 | - warn: 1353 | lhs: GHC.OverloadedLabels.fromLabel 1354 | name: "Use 'fromLabel' from Relude" 1355 | note: "'fromLabel' is already exported from Relude" 1356 | rhs: fromLabel 1357 | - warn: 1358 | lhs: GHC.Stack.CallStack 1359 | name: "Use 'CallStack' from Relude" 1360 | note: "'CallStack' is already exported from Relude" 1361 | rhs: CallStack 1362 | - warn: 1363 | lhs: GHC.Stack.HasCallStack 1364 | name: "Use 'HasCallStack' from Relude" 1365 | note: "'HasCallStack' is already exported from Relude" 1366 | rhs: HasCallStack 1367 | - warn: 1368 | lhs: GHC.Stack.callStack 1369 | name: "Use 'callStack' from Relude" 1370 | note: "'callStack' is already exported from Relude" 1371 | rhs: callStack 1372 | - warn: 1373 | lhs: GHC.Stack.currentCallStack 1374 | name: "Use 'currentCallStack' from Relude" 1375 | note: "'currentCallStack' is already exported from Relude" 1376 | rhs: currentCallStack 1377 | - warn: 1378 | lhs: GHC.Stack.getCallStack 1379 | name: "Use 'getCallStack' from Relude" 1380 | note: "'getCallStack' is already exported from Relude" 1381 | rhs: getCallStack 1382 | - warn: 1383 | lhs: GHC.Stack.prettyCallStack 1384 | name: "Use 'prettyCallStack' from Relude" 1385 | note: "'prettyCallStack' is already exported from Relude" 1386 | rhs: prettyCallStack 1387 | - warn: 1388 | lhs: GHC.Stack.prettySrcLoc 1389 | name: "Use 'prettySrcLoc' from Relude" 1390 | note: "'prettySrcLoc' is already exported from Relude" 1391 | rhs: prettySrcLoc 1392 | - warn: 1393 | lhs: GHC.Stack.withFrozenCallStack 1394 | name: "Use 'withFrozenCallStack' from Relude" 1395 | note: "'withFrozenCallStack' is already exported from Relude" 1396 | rhs: withFrozenCallStack 1397 | - warn: 1398 | lhs: Data.Bifoldable.Bifoldable 1399 | name: "Use 'Bifoldable' from Relude" 1400 | note: "'Bifoldable' is already exported from Relude" 1401 | rhs: Bifoldable 1402 | - warn: 1403 | lhs: Data.Bifoldable.bifold 1404 | name: "Use 'bifold' from Relude" 1405 | note: "'bifold' is already exported from Relude" 1406 | rhs: bifold 1407 | - warn: 1408 | lhs: Data.Bifoldable.bifoldMap 1409 | name: "Use 'bifoldMap' from Relude" 1410 | note: "'bifoldMap' is already exported from Relude" 1411 | rhs: bifoldMap 1412 | - warn: 1413 | lhs: Data.Bifoldable.bifoldr 1414 | name: "Use 'bifoldr' from Relude" 1415 | note: "'bifoldr' is already exported from Relude" 1416 | rhs: bifoldr 1417 | - warn: 1418 | lhs: Data.Bifoldable.bifoldl 1419 | name: "Use 'bifoldl' from Relude" 1420 | note: "'bifoldl' is already exported from Relude" 1421 | rhs: bifoldl 1422 | - warn: 1423 | lhs: "Data.Bifoldable.bifoldl'" 1424 | name: "Use 'bifoldl'' from Relude" 1425 | note: "'bifoldl'' is already exported from Relude" 1426 | rhs: "bifoldl'" 1427 | - warn: 1428 | lhs: Data.Bifoldable.bifoldlM 1429 | name: "Use 'bifoldlM' from Relude" 1430 | note: "'bifoldlM' is already exported from Relude" 1431 | rhs: bifoldlM 1432 | - warn: 1433 | lhs: "Data.Bifoldable.bifoldr'" 1434 | name: "Use 'bifoldr'' from Relude" 1435 | note: "'bifoldr'' is already exported from Relude" 1436 | rhs: "bifoldr'" 1437 | - warn: 1438 | lhs: Data.Bifoldable.bifoldrM 1439 | name: "Use 'bifoldrM' from Relude" 1440 | note: "'bifoldrM' is already exported from Relude" 1441 | rhs: bifoldrM 1442 | - warn: 1443 | lhs: Data.Bifoldable.bitraverse_ 1444 | name: "Use 'bitraverse_' from Relude" 1445 | note: "'bitraverse_' is already exported from Relude" 1446 | rhs: bitraverse_ 1447 | - warn: 1448 | lhs: Data.Bifoldable.bifor_ 1449 | name: "Use 'bifor_' from Relude" 1450 | note: "'bifor_' is already exported from Relude" 1451 | rhs: bifor_ 1452 | - warn: 1453 | lhs: Data.Bifoldable.biasum 1454 | name: "Use 'biasum' from Relude" 1455 | note: "'biasum' is already exported from Relude" 1456 | rhs: biasum 1457 | - warn: 1458 | lhs: Data.Bifoldable.bisequence_ 1459 | name: "Use 'bisequence_' from Relude" 1460 | note: "'bisequence_' is already exported from Relude" 1461 | rhs: bisequence_ 1462 | - warn: 1463 | lhs: Data.Bifoldable.biList 1464 | name: "Use 'biList' from Relude" 1465 | note: "'biList' is already exported from Relude" 1466 | rhs: biList 1467 | - warn: 1468 | lhs: Data.Bifoldable.binull 1469 | name: "Use 'binull' from Relude" 1470 | note: "'binull' is already exported from Relude" 1471 | rhs: binull 1472 | - warn: 1473 | lhs: Data.Bifoldable.bilength 1474 | name: "Use 'bilength' from Relude" 1475 | note: "'bilength' is already exported from Relude" 1476 | rhs: bilength 1477 | - warn: 1478 | lhs: Data.Bifoldable.bielem 1479 | name: "Use 'bielem' from Relude" 1480 | note: "'bielem' is already exported from Relude" 1481 | rhs: bielem 1482 | - warn: 1483 | lhs: Data.Bifoldable.biand 1484 | name: "Use 'biand' from Relude" 1485 | note: "'biand' is already exported from Relude" 1486 | rhs: biand 1487 | - warn: 1488 | lhs: Data.Bifoldable.bior 1489 | name: "Use 'bior' from Relude" 1490 | note: "'bior' is already exported from Relude" 1491 | rhs: bior 1492 | - warn: 1493 | lhs: Data.Bifoldable.biany 1494 | name: "Use 'biany' from Relude" 1495 | note: "'biany' is already exported from Relude" 1496 | rhs: biany 1497 | - warn: 1498 | lhs: Data.Bifoldable.biall 1499 | name: "Use 'biall' from Relude" 1500 | note: "'biall' is already exported from Relude" 1501 | rhs: biall 1502 | - warn: 1503 | lhs: Data.Bifoldable.bifind 1504 | name: "Use 'bifind' from Relude" 1505 | note: "'bifind' is already exported from Relude" 1506 | rhs: bifind 1507 | - warn: 1508 | lhs: Data.Bitraversable.Bitraversable 1509 | name: "Use 'Bitraversable' from Relude" 1510 | note: "'Bitraversable' is already exported from Relude" 1511 | rhs: Bitraversable 1512 | - warn: 1513 | lhs: Data.Bitraversable.bitraverse 1514 | name: "Use 'bitraverse' from Relude" 1515 | note: "'bitraverse' is already exported from Relude" 1516 | rhs: bitraverse 1517 | - warn: 1518 | lhs: Data.Bitraversable.bisequence 1519 | name: "Use 'bisequence' from Relude" 1520 | note: "'bisequence' is already exported from Relude" 1521 | rhs: bisequence 1522 | - warn: 1523 | lhs: Data.Bitraversable.bifor 1524 | name: "Use 'bifor' from Relude" 1525 | note: "'bifor' is already exported from Relude" 1526 | rhs: bifor 1527 | - warn: 1528 | lhs: Data.Bitraversable.bimapDefault 1529 | name: "Use 'bimapDefault' from Relude" 1530 | note: "'bimapDefault' is already exported from Relude" 1531 | rhs: bimapDefault 1532 | - warn: 1533 | lhs: Data.Bitraversable.bifoldMapDefault 1534 | name: "Use 'bifoldMapDefault' from Relude" 1535 | note: "'bifoldMapDefault' is already exported from Relude" 1536 | rhs: bifoldMapDefault 1537 | - warn: 1538 | lhs: Control.Monad.guard 1539 | name: "Use 'guard' from Relude" 1540 | note: "'guard' is already exported from Relude" 1541 | rhs: guard 1542 | - warn: 1543 | lhs: Control.Monad.unless 1544 | name: "Use 'unless' from Relude" 1545 | note: "'unless' is already exported from Relude" 1546 | rhs: unless 1547 | - warn: 1548 | lhs: Control.Monad.when 1549 | name: "Use 'when' from Relude" 1550 | note: "'when' is already exported from Relude" 1551 | rhs: when 1552 | - warn: 1553 | lhs: Data.Bool.bool 1554 | name: "Use 'bool' from Relude" 1555 | note: "'bool' is already exported from Relude" 1556 | rhs: bool 1557 | - warn: 1558 | lhs: Data.Hashable.Hashable 1559 | name: "Use 'Hashable' from Relude" 1560 | note: "'Hashable' is already exported from Relude" 1561 | rhs: Hashable 1562 | - warn: 1563 | lhs: Data.Hashable.hashWithSalt 1564 | name: "Use 'hashWithSalt' from Relude" 1565 | note: "'hashWithSalt' is already exported from Relude" 1566 | rhs: hashWithSalt 1567 | - warn: 1568 | lhs: Data.HashMap.Strict.HashMap 1569 | name: "Use 'HashMap' from Relude" 1570 | note: "'HashMap' is already exported from Relude" 1571 | rhs: HashMap 1572 | - warn: 1573 | lhs: Data.HashSet.HashSet 1574 | name: "Use 'HashSet' from Relude" 1575 | note: "'HashSet' is already exported from Relude" 1576 | rhs: HashSet 1577 | - warn: 1578 | lhs: Data.IntMap.Strict.IntMap 1579 | name: "Use 'IntMap' from Relude" 1580 | note: "'IntMap' is already exported from Relude" 1581 | rhs: IntMap 1582 | - warn: 1583 | lhs: Data.IntSet.IntSet 1584 | name: "Use 'IntSet' from Relude" 1585 | note: "'IntSet' is already exported from Relude" 1586 | rhs: IntSet 1587 | - warn: 1588 | lhs: Data.Map.Strict.Map 1589 | name: "Use 'Map' from Relude" 1590 | note: "'Map' is already exported from Relude" 1591 | rhs: Map 1592 | - warn: 1593 | lhs: Data.Sequence.Sequence 1594 | name: "Use 'Sequence' from Relude" 1595 | note: "'Sequence' is already exported from Relude" 1596 | rhs: Sequence 1597 | - warn: 1598 | lhs: Data.Set.Set 1599 | name: "Use 'Set' from Relude" 1600 | note: "'Set' is already exported from Relude" 1601 | rhs: Set 1602 | - warn: 1603 | lhs: Data.Tuple.swap 1604 | name: "Use 'swap' from Relude" 1605 | note: "'swap' is already exported from Relude" 1606 | rhs: swap 1607 | - warn: 1608 | lhs: Data.Vector.Vector 1609 | name: "Use 'Vector' from Relude" 1610 | note: "'Vector' is already exported from Relude" 1611 | rhs: Vector 1612 | - warn: 1613 | lhs: GHC.Exts.IsList 1614 | name: "Use 'IsList' from Relude" 1615 | note: "'IsList' is already exported from Relude" 1616 | rhs: IsList 1617 | - warn: 1618 | lhs: GHC.Exts.fromList 1619 | name: "Use 'fromList' from Relude" 1620 | note: "'fromList' is already exported from Relude" 1621 | rhs: fromList 1622 | - warn: 1623 | lhs: GHC.Exts.fromListN 1624 | name: "Use 'fromListN' from Relude" 1625 | note: "'fromListN' is already exported from Relude" 1626 | rhs: fromListN 1627 | - warn: 1628 | lhs: Debug.Trace.trace 1629 | name: "Use 'trace' from Relude" 1630 | note: "'trace' is already exported from Relude" 1631 | rhs: trace 1632 | - warn: 1633 | lhs: Debug.Trace.traceShow 1634 | name: "Use 'traceShow' from Relude" 1635 | note: "'traceShow' is already exported from Relude" 1636 | rhs: traceShow 1637 | - warn: 1638 | lhs: Debug.Trace.traceShowId 1639 | name: "Use 'traceShowId' from Relude" 1640 | note: "'traceShowId' is already exported from Relude" 1641 | rhs: traceShowId 1642 | - warn: 1643 | lhs: Debug.Trace.traceShowM 1644 | name: "Use 'traceShowM' from Relude" 1645 | note: "'traceShowM' is already exported from Relude" 1646 | rhs: traceShowM 1647 | - warn: 1648 | lhs: Debug.Trace.traceM 1649 | name: "Use 'traceM' from Relude" 1650 | note: "'traceM' is already exported from Relude" 1651 | rhs: traceM 1652 | - warn: 1653 | lhs: Debug.Trace.traceId 1654 | name: "Use 'traceId' from Relude" 1655 | note: "'traceId' is already exported from Relude" 1656 | rhs: traceId 1657 | - warn: 1658 | lhs: Control.DeepSeq.NFData 1659 | name: "Use 'NFData' from Relude" 1660 | note: "'NFData' is already exported from Relude" 1661 | rhs: NFData 1662 | - warn: 1663 | lhs: Control.DeepSeq.rnf 1664 | name: "Use 'rnf' from Relude" 1665 | note: "'rnf' is already exported from Relude" 1666 | rhs: rnf 1667 | - warn: 1668 | lhs: Control.DeepSeq.deepseq 1669 | name: "Use 'deepseq' from Relude" 1670 | note: "'deepseq' is already exported from Relude" 1671 | rhs: deepseq 1672 | - warn: 1673 | lhs: Control.DeepSeq.force 1674 | name: "Use 'force' from Relude" 1675 | note: "'force' is already exported from Relude" 1676 | rhs: force 1677 | - warn: 1678 | lhs: "(Control.DeepSeq.$!!)" 1679 | name: "Use '$!!' from Relude" 1680 | note: "Operator '($!!)' is already exported from Relude" 1681 | rhs: "($!!)" 1682 | - warn: 1683 | lhs: Control.Exception.Exception 1684 | name: "Use 'Exception' from Relude" 1685 | note: "'Exception' is already exported from Relude" 1686 | rhs: Exception 1687 | - warn: 1688 | lhs: Control.Exception.SomeException 1689 | name: "Use 'SomeException' from Relude" 1690 | note: "'SomeException' is already exported from Relude" 1691 | rhs: SomeException 1692 | - warn: 1693 | lhs: Control.Exception.toException 1694 | name: "Use 'toException' from Relude" 1695 | note: "'toException' is already exported from Relude" 1696 | rhs: toException 1697 | - warn: 1698 | lhs: Control.Exception.fromException 1699 | name: "Use 'fromException' from Relude" 1700 | note: "'fromException' is already exported from Relude" 1701 | rhs: fromException 1702 | - warn: 1703 | lhs: Control.Exception.displayException 1704 | name: "Use 'displayException' from Relude" 1705 | note: "'displayException' is already exported from Relude" 1706 | rhs: displayException 1707 | - warn: 1708 | lhs: Data.Foldable.asum 1709 | name: "Use 'asum' from Relude" 1710 | note: "'asum' is already exported from Relude" 1711 | rhs: asum 1712 | - warn: 1713 | lhs: Data.Foldable.find 1714 | name: "Use 'find' from Relude" 1715 | note: "'find' is already exported from Relude" 1716 | rhs: find 1717 | - warn: 1718 | lhs: Data.Foldable.find 1719 | name: "Use 'find' from Relude" 1720 | note: "'find' is already exported from Relude" 1721 | rhs: find 1722 | - warn: 1723 | lhs: Data.Foldable.fold 1724 | name: "Use 'fold' from Relude" 1725 | note: "'fold' is already exported from Relude" 1726 | rhs: fold 1727 | - warn: 1728 | lhs: "Data.Foldable.foldl'" 1729 | name: "Use 'foldl'' from Relude" 1730 | note: "'foldl'' is already exported from Relude" 1731 | rhs: "foldl'" 1732 | - warn: 1733 | lhs: Data.Foldable.forM_ 1734 | name: "Use 'forM_' from Relude" 1735 | note: "'forM_' is already exported from Relude" 1736 | rhs: forM_ 1737 | - warn: 1738 | lhs: Data.Foldable.for_ 1739 | name: "Use 'for_' from Relude" 1740 | note: "'for_' is already exported from Relude" 1741 | rhs: for_ 1742 | - warn: 1743 | lhs: Data.Foldable.sequenceA_ 1744 | name: "Use 'sequenceA_' from Relude" 1745 | note: "'sequenceA_' is already exported from Relude" 1746 | rhs: sequenceA_ 1747 | - warn: 1748 | lhs: Data.Foldable.toList 1749 | name: "Use 'toList' from Relude" 1750 | note: "'toList' is already exported from Relude" 1751 | rhs: toList 1752 | - warn: 1753 | lhs: Data.Foldable.traverse_ 1754 | name: "Use 'traverse_' from Relude" 1755 | note: "'traverse_' is already exported from Relude" 1756 | rhs: traverse_ 1757 | - warn: 1758 | lhs: Data.Traversable.forM 1759 | name: "Use 'forM' from Relude" 1760 | note: "'forM' is already exported from Relude" 1761 | rhs: forM 1762 | - warn: 1763 | lhs: Data.Traversable.mapAccumL 1764 | name: "Use 'mapAccumL' from Relude" 1765 | note: "'mapAccumL' is already exported from Relude" 1766 | rhs: mapAccumL 1767 | - warn: 1768 | lhs: Data.Traversable.mapAccumR 1769 | name: "Use 'mapAccumR' from Relude" 1770 | note: "'mapAccumR' is already exported from Relude" 1771 | rhs: mapAccumR 1772 | - warn: 1773 | lhs: "(Control.Arrow.&&&)" 1774 | name: "Use '&&&' from Relude" 1775 | note: "Operator '(&&&)' is already exported from Relude" 1776 | rhs: "(&&&)" 1777 | - warn: 1778 | lhs: "(Control.Category.>>>)" 1779 | name: "Use '>>>' from Relude" 1780 | note: "Operator '(>>>)' is already exported from Relude" 1781 | rhs: "(>>>)" 1782 | - warn: 1783 | lhs: "(Control.Category.<<<)" 1784 | name: "Use '<<<' from Relude" 1785 | note: "Operator '(<<<)' is already exported from Relude" 1786 | rhs: "(<<<)" 1787 | - warn: 1788 | lhs: Data.Function.fix 1789 | name: "Use 'fix' from Relude" 1790 | note: "'fix' is already exported from Relude" 1791 | rhs: fix 1792 | - warn: 1793 | lhs: Data.Function.on 1794 | name: "Use 'on' from Relude" 1795 | note: "'on' is already exported from Relude" 1796 | rhs: 'on' 1797 | - warn: 1798 | lhs: Data.Bifunctor.Bifunctor 1799 | name: "Use 'Bifunctor' from Relude" 1800 | note: "'Bifunctor' is already exported from Relude" 1801 | rhs: Bifunctor 1802 | - warn: 1803 | lhs: Data.Bifunctor.bimap 1804 | name: "Use 'bimap' from Relude" 1805 | note: "'bimap' is already exported from Relude" 1806 | rhs: bimap 1807 | - warn: 1808 | lhs: Data.Bifunctor.first 1809 | name: "Use 'first' from Relude" 1810 | note: "'first' is already exported from Relude" 1811 | rhs: first 1812 | - warn: 1813 | lhs: Data.Bifunctor.second 1814 | name: "Use 'second' from Relude" 1815 | note: "'second' is already exported from Relude" 1816 | rhs: second 1817 | - warn: 1818 | lhs: Data.Functor.void 1819 | name: "Use 'void' from Relude" 1820 | note: "'void' is already exported from Relude" 1821 | rhs: void 1822 | - warn: 1823 | lhs: "(Data.Functor.$>)" 1824 | name: "Use '$>' from Relude" 1825 | note: "Operator '($>)' is already exported from Relude" 1826 | rhs: "($>)" 1827 | - warn: 1828 | lhs: "(Data.Functor.<&>)" 1829 | name: "Use '<&>' from Relude" 1830 | note: "Operator '(<&>)' is already exported from Relude" 1831 | rhs: "(<&>)" 1832 | - warn: 1833 | lhs: Data.Functor.Compose.Compose 1834 | name: "Use 'Compose' from Relude" 1835 | note: "'Compose' is already exported from Relude" 1836 | rhs: Compose 1837 | - warn: 1838 | lhs: Data.Functor.Compose.getCompose 1839 | name: "Use 'getCompose' from Relude" 1840 | note: "'getCompose' is already exported from Relude" 1841 | rhs: getCompose 1842 | - warn: 1843 | lhs: Data.Functor.Identity.Identity 1844 | name: "Use 'Identity' from Relude" 1845 | note: "'Identity' is already exported from Relude" 1846 | rhs: Identity 1847 | - warn: 1848 | lhs: Data.Functor.Identity.runIdentity 1849 | name: "Use 'runIdentity' from Relude" 1850 | note: "'runIdentity' is already exported from Relude" 1851 | rhs: runIdentity 1852 | - warn: 1853 | lhs: Control.Concurrent.MVar.MVar 1854 | name: "Use 'MVar' from Relude" 1855 | note: "'MVar' is already exported from Relude" 1856 | rhs: MVar 1857 | - warn: 1858 | lhs: Control.Concurrent.MVar.newEmptyMVar 1859 | name: "Use 'newEmptyMVar' from Relude" 1860 | note: "'newEmptyMVar' is already exported from Relude" 1861 | rhs: newEmptyMVar 1862 | - warn: 1863 | lhs: Control.Concurrent.MVar.newMVar 1864 | name: "Use 'newMVar' from Relude" 1865 | note: "'newMVar' is already exported from Relude" 1866 | rhs: newMVar 1867 | - warn: 1868 | lhs: Control.Concurrent.MVar.putMVar 1869 | name: "Use 'putMVar' from Relude" 1870 | note: "'putMVar' is already exported from Relude" 1871 | rhs: putMVar 1872 | - warn: 1873 | lhs: Control.Concurrent.MVar.readMVar 1874 | name: "Use 'readMVar' from Relude" 1875 | note: "'readMVar' is already exported from Relude" 1876 | rhs: readMVar 1877 | - warn: 1878 | lhs: Control.Concurrent.MVar.swapMVar 1879 | name: "Use 'swapMVar' from Relude" 1880 | note: "'swapMVar' is already exported from Relude" 1881 | rhs: swapMVar 1882 | - warn: 1883 | lhs: Control.Concurrent.MVar.takeMVar 1884 | name: "Use 'takeMVar' from Relude" 1885 | note: "'takeMVar' is already exported from Relude" 1886 | rhs: takeMVar 1887 | - warn: 1888 | lhs: Control.Concurrent.MVar.tryPutMVar 1889 | name: "Use 'tryPutMVar' from Relude" 1890 | note: "'tryPutMVar' is already exported from Relude" 1891 | rhs: tryPutMVar 1892 | - warn: 1893 | lhs: Control.Concurrent.MVar.tryReadMVar 1894 | name: "Use 'tryReadMVar' from Relude" 1895 | note: "'tryReadMVar' is already exported from Relude" 1896 | rhs: tryReadMVar 1897 | - warn: 1898 | lhs: Control.Concurrent.MVar.tryTakeMVar 1899 | name: "Use 'tryTakeMVar' from Relude" 1900 | note: "'tryTakeMVar' is already exported from Relude" 1901 | rhs: tryTakeMVar 1902 | - warn: 1903 | lhs: Control.Monad.STM.STM 1904 | name: "Use 'STM' from Relude" 1905 | note: "'STM' is already exported from Relude" 1906 | rhs: STM 1907 | - warn: 1908 | lhs: Control.Monad.STM.atomically 1909 | name: "Use 'atomically' from Relude" 1910 | note: "'atomically' is already exported from Relude" 1911 | rhs: atomically 1912 | - warn: 1913 | lhs: Control.Monad.STM.throwSTM 1914 | name: "Use 'throwSTM' from Relude" 1915 | note: "'throwSTM' is already exported from Relude" 1916 | rhs: throwSTM 1917 | - warn: 1918 | lhs: Control.Monad.STM.catchSTM 1919 | name: "Use 'catchSTM' from Relude" 1920 | note: "'catchSTM' is already exported from Relude" 1921 | rhs: catchSTM 1922 | - warn: 1923 | lhs: Control.Concurrent.STM.TVar.TVar 1924 | name: "Use 'TVar' from Relude" 1925 | note: "'TVar' is already exported from Relude" 1926 | rhs: TVar 1927 | - warn: 1928 | lhs: Control.Concurrent.STM.TVar.newTVarIO 1929 | name: "Use 'newTVarIO' from Relude" 1930 | note: "'newTVarIO' is already exported from Relude" 1931 | rhs: newTVarIO 1932 | - warn: 1933 | lhs: Control.Concurrent.STM.TVar.readTVarIO 1934 | name: "Use 'readTVarIO' from Relude" 1935 | note: "'readTVarIO' is already exported from Relude" 1936 | rhs: readTVarIO 1937 | - warn: 1938 | lhs: "Control.Concurrent.STM.TVar.modifyTVar'" 1939 | name: "Use 'modifyTVar'' from Relude" 1940 | note: "'modifyTVar'' is already exported from Relude" 1941 | rhs: "modifyTVar'" 1942 | - warn: 1943 | lhs: Control.Concurrent.STM.TVar.newTVar 1944 | name: "Use 'newTVar' from Relude" 1945 | note: "'newTVar' is already exported from Relude" 1946 | rhs: newTVar 1947 | - warn: 1948 | lhs: Control.Concurrent.STM.TVar.readTVar 1949 | name: "Use 'readTVar' from Relude" 1950 | note: "'readTVar' is already exported from Relude" 1951 | rhs: readTVar 1952 | - warn: 1953 | lhs: Control.Concurrent.STM.TVar.writeTVar 1954 | name: "Use 'writeTVar' from Relude" 1955 | note: "'writeTVar' is already exported from Relude" 1956 | rhs: writeTVar 1957 | - warn: 1958 | lhs: Control.Concurrent.STM.TMVar.TMVar 1959 | name: "Use 'TMVar' from Relude" 1960 | note: "'TMVar' is already exported from Relude" 1961 | rhs: TMVar 1962 | - warn: 1963 | lhs: Control.Concurrent.STM.TMVar.newTMVar 1964 | name: "Use 'newTMVar' from Relude" 1965 | note: "'newTMVar' is already exported from Relude" 1966 | rhs: newTMVar 1967 | - warn: 1968 | lhs: Control.Concurrent.STM.TMVar.newEmptyTMVar 1969 | name: "Use 'newEmptyTMVar' from Relude" 1970 | note: "'newEmptyTMVar' is already exported from Relude" 1971 | rhs: newEmptyTMVar 1972 | - warn: 1973 | lhs: Control.Concurrent.STM.TMVar.newTMVarIO 1974 | name: "Use 'newTMVarIO' from Relude" 1975 | note: "'newTMVarIO' is already exported from Relude" 1976 | rhs: newTMVarIO 1977 | - warn: 1978 | lhs: Control.Concurrent.STM.TMVar.newEmptyTMVarIO 1979 | name: "Use 'newEmptyTMVarIO' from Relude" 1980 | note: "'newEmptyTMVarIO' is already exported from Relude" 1981 | rhs: newEmptyTMVarIO 1982 | - warn: 1983 | lhs: Control.Concurrent.STM.TMVar.takeTMVar 1984 | name: "Use 'takeTMVar' from Relude" 1985 | note: "'takeTMVar' is already exported from Relude" 1986 | rhs: takeTMVar 1987 | - warn: 1988 | lhs: Control.Concurrent.STM.TMVar.putTMVar 1989 | name: "Use 'putTMVar' from Relude" 1990 | note: "'putTMVar' is already exported from Relude" 1991 | rhs: putTMVar 1992 | - warn: 1993 | lhs: Control.Concurrent.STM.TMVar.readTMVar 1994 | name: "Use 'readTMVar' from Relude" 1995 | note: "'readTMVar' is already exported from Relude" 1996 | rhs: readTMVar 1997 | - warn: 1998 | lhs: Control.Concurrent.STM.TMVar.tryReadTMVar 1999 | name: "Use 'tryReadTMVar' from Relude" 2000 | note: "'tryReadTMVar' is already exported from Relude" 2001 | rhs: tryReadTMVar 2002 | - warn: 2003 | lhs: Control.Concurrent.STM.TMVar.swapTMVar 2004 | name: "Use 'swapTMVar' from Relude" 2005 | note: "'swapTMVar' is already exported from Relude" 2006 | rhs: swapTMVar 2007 | - warn: 2008 | lhs: Control.Concurrent.STM.TMVar.tryTakeTMVar 2009 | name: "Use 'tryTakeTMVar' from Relude" 2010 | note: "'tryTakeTMVar' is already exported from Relude" 2011 | rhs: tryTakeTMVar 2012 | - warn: 2013 | lhs: Control.Concurrent.STM.TMVar.tryPutTMVar 2014 | name: "Use 'tryPutTMVar' from Relude" 2015 | note: "'tryPutTMVar' is already exported from Relude" 2016 | rhs: tryPutTMVar 2017 | - warn: 2018 | lhs: Control.Concurrent.STM.TMVar.isEmptyTMVar 2019 | name: "Use 'isEmptyTMVar' from Relude" 2020 | note: "'isEmptyTMVar' is already exported from Relude" 2021 | rhs: isEmptyTMVar 2022 | - warn: 2023 | lhs: Control.Concurrent.STM.TMVar.mkWeakTMVar 2024 | name: "Use 'mkWeakTMVar' from Relude" 2025 | note: "'mkWeakTMVar' is already exported from Relude" 2026 | rhs: mkWeakTMVar 2027 | - warn: 2028 | lhs: Data.IORef.IORef 2029 | name: "Use 'IORef' from Relude" 2030 | note: "'IORef' is already exported from Relude" 2031 | rhs: IORef 2032 | - warn: 2033 | lhs: Data.IORef.atomicModifyIORef 2034 | name: "Use 'atomicModifyIORef' from Relude" 2035 | note: "'atomicModifyIORef' is already exported from Relude" 2036 | rhs: atomicModifyIORef 2037 | - warn: 2038 | lhs: "Data.IORef.atomicModifyIORef'" 2039 | name: "Use 'atomicModifyIORef'' from Relude" 2040 | note: "'atomicModifyIORef'' is already exported from Relude" 2041 | rhs: "atomicModifyIORef'" 2042 | - warn: 2043 | lhs: Data.IORef.atomicWriteIORef 2044 | name: "Use 'atomicWriteIORef' from Relude" 2045 | note: "'atomicWriteIORef' is already exported from Relude" 2046 | rhs: atomicWriteIORef 2047 | - warn: 2048 | lhs: Data.IORef.modifyIORef 2049 | name: "Use 'modifyIORef' from Relude" 2050 | note: "'modifyIORef' is already exported from Relude" 2051 | rhs: modifyIORef 2052 | - warn: 2053 | lhs: "Data.IORef.modifyIORef'" 2054 | name: "Use 'modifyIORef'' from Relude" 2055 | note: "'modifyIORef'' is already exported from Relude" 2056 | rhs: "modifyIORef'" 2057 | - warn: 2058 | lhs: Data.IORef.newIORef 2059 | name: "Use 'newIORef' from Relude" 2060 | note: "'newIORef' is already exported from Relude" 2061 | rhs: newIORef 2062 | - warn: 2063 | lhs: Data.IORef.readIORef 2064 | name: "Use 'readIORef' from Relude" 2065 | note: "'readIORef' is already exported from Relude" 2066 | rhs: readIORef 2067 | - warn: 2068 | lhs: Data.IORef.writeIORef 2069 | name: "Use 'writeIORef' from Relude" 2070 | note: "'writeIORef' is already exported from Relude" 2071 | rhs: writeIORef 2072 | - warn: 2073 | lhs: "atomicModifyIORef ref (\\a -> (f a, ()))" 2074 | rhs: atomicModifyIORef_ ref f 2075 | - warn: 2076 | lhs: "atomicModifyIORef ref $ \\a -> (f a, ())" 2077 | rhs: atomicModifyIORef_ ref f 2078 | - warn: 2079 | lhs: "atomicModifyIORef' ref $ \\a -> (f a, ())" 2080 | rhs: "atomicModifyIORef'_ ref f" 2081 | - warn: 2082 | lhs: "atomicModifyIORef' ref (\\a -> (f a, ()))" 2083 | rhs: "atomicModifyIORef'_ ref f" 2084 | - warn: 2085 | lhs: Data.Text.IO.getLine 2086 | name: "Use 'getLine' from Relude" 2087 | note: "'getLine' is already exported from Relude" 2088 | rhs: getLine 2089 | - warn: 2090 | lhs: System.IO.hFlush 2091 | name: "Use 'hFlush' from Relude" 2092 | note: "'hFlush' is already exported from Relude" 2093 | rhs: hFlush 2094 | - warn: 2095 | lhs: System.IO.hIsEOF 2096 | name: "Use 'hIsEOF' from Relude" 2097 | note: "'hIsEOF' is already exported from Relude" 2098 | rhs: hIsEOF 2099 | - warn: 2100 | lhs: System.IO.hSetBuffering 2101 | name: "Use 'hSetBuffering' from Relude" 2102 | note: "'hSetBuffering' is already exported from Relude" 2103 | rhs: hSetBuffering 2104 | - warn: 2105 | lhs: System.IO.hGetBuffering 2106 | name: "Use 'hGetBuffering' from Relude" 2107 | note: "'hGetBuffering' is already exported from Relude" 2108 | rhs: hGetBuffering 2109 | - warn: 2110 | lhs: System.IO.Handle 2111 | name: "Use 'Handle' from Relude" 2112 | note: "'Handle' is already exported from Relude" 2113 | rhs: Handle 2114 | - warn: 2115 | lhs: System.IO.stdin 2116 | name: "Use 'stdin' from Relude" 2117 | note: "'stdin' is already exported from Relude" 2118 | rhs: stdin 2119 | - warn: 2120 | lhs: System.IO.stdout 2121 | name: "Use 'stdout' from Relude" 2122 | note: "'stdout' is already exported from Relude" 2123 | rhs: stdout 2124 | - warn: 2125 | lhs: System.IO.stderr 2126 | name: "Use 'stderr' from Relude" 2127 | note: "'stderr' is already exported from Relude" 2128 | rhs: stderr 2129 | - warn: 2130 | lhs: System.IO.withFile 2131 | name: "Use 'withFile' from Relude" 2132 | note: "'withFile' is already exported from Relude" 2133 | rhs: withFile 2134 | - warn: 2135 | lhs: System.IO.BufferMode 2136 | name: "Use 'BufferMode' from Relude" 2137 | note: "'BufferMode' is already exported from Relude" 2138 | rhs: BufferMode 2139 | - warn: 2140 | lhs: System.Environment.getArgs 2141 | name: "Use 'getArgs' from Relude" 2142 | note: "'getArgs' is already exported from Relude" 2143 | rhs: getArgs 2144 | - warn: 2145 | lhs: System.Environment.lookupEnv 2146 | name: "Use 'lookupEnv' from Relude" 2147 | note: "'lookupEnv' is already exported from Relude" 2148 | rhs: lookupEnv 2149 | - warn: 2150 | lhs: Data.List.genericDrop 2151 | name: "Use 'genericDrop' from Relude" 2152 | note: "'genericDrop' is already exported from Relude" 2153 | rhs: genericDrop 2154 | - warn: 2155 | lhs: Data.List.genericLength 2156 | name: "Use 'genericLength' from Relude" 2157 | note: "'genericLength' is already exported from Relude" 2158 | rhs: genericLength 2159 | - warn: 2160 | lhs: Data.List.genericReplicate 2161 | name: "Use 'genericReplicate' from Relude" 2162 | note: "'genericReplicate' is already exported from Relude" 2163 | rhs: genericReplicate 2164 | - warn: 2165 | lhs: Data.List.genericSplitAt 2166 | name: "Use 'genericSplitAt' from Relude" 2167 | note: "'genericSplitAt' is already exported from Relude" 2168 | rhs: genericSplitAt 2169 | - warn: 2170 | lhs: Data.List.genericTake 2171 | name: "Use 'genericTake' from Relude" 2172 | note: "'genericTake' is already exported from Relude" 2173 | rhs: genericTake 2174 | - warn: 2175 | lhs: Data.List.group 2176 | name: "Use 'group' from Relude" 2177 | note: "'group' is already exported from Relude" 2178 | rhs: group 2179 | - warn: 2180 | lhs: Data.List.inits 2181 | name: "Use 'inits' from Relude" 2182 | note: "'inits' is already exported from Relude" 2183 | rhs: inits 2184 | - warn: 2185 | lhs: Data.List.intercalate 2186 | name: "Use 'intercalate' from Relude" 2187 | note: "'intercalate' is already exported from Relude" 2188 | rhs: intercalate 2189 | - warn: 2190 | lhs: Data.List.intersperse 2191 | name: "Use 'intersperse' from Relude" 2192 | note: "'intersperse' is already exported from Relude" 2193 | rhs: intersperse 2194 | - warn: 2195 | lhs: Data.List.isPrefixOf 2196 | name: "Use 'isPrefixOf' from Relude" 2197 | note: "'isPrefixOf' is already exported from Relude" 2198 | rhs: isPrefixOf 2199 | - warn: 2200 | lhs: Data.List.permutations 2201 | name: "Use 'permutations' from Relude" 2202 | note: "'permutations' is already exported from Relude" 2203 | rhs: permutations 2204 | - warn: 2205 | lhs: "Data.List.scanl'" 2206 | name: "Use 'scanl'' from Relude" 2207 | note: "'scanl'' is already exported from Relude" 2208 | rhs: "scanl'" 2209 | - warn: 2210 | lhs: Data.List.sort 2211 | name: "Use 'sort' from Relude" 2212 | note: "'sort' is already exported from Relude" 2213 | rhs: sort 2214 | - warn: 2215 | lhs: Data.List.sortBy 2216 | name: "Use 'sortBy' from Relude" 2217 | note: "'sortBy' is already exported from Relude" 2218 | rhs: sortBy 2219 | - warn: 2220 | lhs: Data.List.sortOn 2221 | name: "Use 'sortOn' from Relude" 2222 | note: "'sortOn' is already exported from Relude" 2223 | rhs: sortOn 2224 | - warn: 2225 | lhs: Data.List.subsequences 2226 | name: "Use 'subsequences' from Relude" 2227 | note: "'subsequences' is already exported from Relude" 2228 | rhs: subsequences 2229 | - warn: 2230 | lhs: Data.List.tails 2231 | name: "Use 'tails' from Relude" 2232 | note: "'tails' is already exported from Relude" 2233 | rhs: tails 2234 | - warn: 2235 | lhs: Data.List.transpose 2236 | name: "Use 'transpose' from Relude" 2237 | note: "'transpose' is already exported from Relude" 2238 | rhs: transpose 2239 | - warn: 2240 | lhs: Data.List.uncons 2241 | name: "Use 'uncons' from Relude" 2242 | note: "'uncons' is already exported from Relude" 2243 | rhs: uncons 2244 | - warn: 2245 | lhs: Data.List.unfoldr 2246 | name: "Use 'unfoldr' from Relude" 2247 | note: "'unfoldr' is already exported from Relude" 2248 | rhs: unfoldr 2249 | - warn: 2250 | lhs: Data.List.NonEmpty.NonEmpty 2251 | name: "Use 'NonEmpty' from Relude" 2252 | note: "'NonEmpty' is already exported from Relude" 2253 | rhs: NonEmpty 2254 | - warn: 2255 | lhs: "(Data.List.NonEmpty.:|)" 2256 | name: "Use ':|' from Relude" 2257 | note: "Operator '(:|)' is already exported from Relude" 2258 | rhs: "(:|)" 2259 | - warn: 2260 | lhs: Data.List.NonEmpty.nonEmpty 2261 | name: "Use 'nonEmpty' from Relude" 2262 | note: "'nonEmpty' is already exported from Relude" 2263 | rhs: nonEmpty 2264 | - warn: 2265 | lhs: Data.List.NonEmpty.head 2266 | name: "Use 'head' from Relude" 2267 | note: "'head' is already exported from Relude" 2268 | rhs: head 2269 | - warn: 2270 | lhs: Data.List.NonEmpty.init 2271 | name: "Use 'init' from Relude" 2272 | note: "'init' is already exported from Relude" 2273 | rhs: init 2274 | - warn: 2275 | lhs: Data.List.NonEmpty.last 2276 | name: "Use 'last' from Relude" 2277 | note: "'last' is already exported from Relude" 2278 | rhs: last 2279 | - warn: 2280 | lhs: Data.List.NonEmpty.tail 2281 | name: "Use 'tail' from Relude" 2282 | note: "'tail' is already exported from Relude" 2283 | rhs: tail 2284 | - warn: 2285 | lhs: GHC.Exts.sortWith 2286 | name: "Use 'sortWith' from Relude" 2287 | note: "'sortWith' is already exported from Relude" 2288 | rhs: sortWith 2289 | - warn: 2290 | lhs: Control.Monad.Except.ExceptT 2291 | name: "Use 'ExceptT' from Relude" 2292 | note: "'ExceptT' is already exported from Relude" 2293 | rhs: ExceptT 2294 | - warn: 2295 | lhs: Control.Monad.Except.runExceptT 2296 | name: "Use 'runExceptT' from Relude" 2297 | note: "'runExceptT' is already exported from Relude" 2298 | rhs: runExceptT 2299 | - warn: 2300 | lhs: Control.Monad.Reader.MonadReader 2301 | name: "Use 'MonadReader' from Relude" 2302 | note: "'MonadReader' is already exported from Relude" 2303 | rhs: MonadReader 2304 | - warn: 2305 | lhs: Control.Monad.Reader.Reader 2306 | name: "Use 'Reader' from Relude" 2307 | note: "'Reader' is already exported from Relude" 2308 | rhs: Reader 2309 | - warn: 2310 | lhs: Control.Monad.Reader.ReaderT 2311 | name: "Use 'ReaderT' from Relude" 2312 | note: "'ReaderT' is already exported from Relude" 2313 | rhs: ReaderT 2314 | - warn: 2315 | lhs: Control.Monad.Reader.runReaderT 2316 | name: "Use 'runReaderT' from Relude" 2317 | note: "'runReaderT' is already exported from Relude" 2318 | rhs: runReaderT 2319 | - warn: 2320 | lhs: Control.Monad.Reader.ask 2321 | name: "Use 'ask' from Relude" 2322 | note: "'ask' is already exported from Relude" 2323 | rhs: ask 2324 | - warn: 2325 | lhs: Control.Monad.Reader.asks 2326 | name: "Use 'asks' from Relude" 2327 | note: "'asks' is already exported from Relude" 2328 | rhs: asks 2329 | - warn: 2330 | lhs: Control.Monad.Reader.local 2331 | name: "Use 'local' from Relude" 2332 | note: "'local' is already exported from Relude" 2333 | rhs: local 2334 | - warn: 2335 | lhs: Control.Monad.Reader.reader 2336 | name: "Use 'reader' from Relude" 2337 | note: "'reader' is already exported from Relude" 2338 | rhs: reader 2339 | - warn: 2340 | lhs: Control.Monad.Reader.runReader 2341 | name: "Use 'runReader' from Relude" 2342 | note: "'runReader' is already exported from Relude" 2343 | rhs: runReader 2344 | - warn: 2345 | lhs: Control.Monad.Reader.withReader 2346 | name: "Use 'withReader' from Relude" 2347 | note: "'withReader' is already exported from Relude" 2348 | rhs: withReader 2349 | - warn: 2350 | lhs: Control.Monad.Reader.withReaderT 2351 | name: "Use 'withReaderT' from Relude" 2352 | note: "'withReaderT' is already exported from Relude" 2353 | rhs: withReaderT 2354 | - warn: 2355 | lhs: Control.Monad.State.Strict.MonadState 2356 | name: "Use 'MonadState' from Relude" 2357 | note: "'MonadState' is already exported from Relude" 2358 | rhs: MonadState 2359 | - warn: 2360 | lhs: Control.Monad.State.Strict.State 2361 | name: "Use 'State' from Relude" 2362 | note: "'State' is already exported from Relude" 2363 | rhs: State 2364 | - warn: 2365 | lhs: Control.Monad.State.Strict.StateT 2366 | name: "Use 'StateT' from Relude" 2367 | note: "'StateT' is already exported from Relude" 2368 | rhs: StateT 2369 | - warn: 2370 | lhs: Control.Monad.State.Strict.runStateT 2371 | name: "Use 'runStateT' from Relude" 2372 | note: "'runStateT' is already exported from Relude" 2373 | rhs: runStateT 2374 | - warn: 2375 | lhs: Control.Monad.State.Strict.evalState 2376 | name: "Use 'evalState' from Relude" 2377 | note: "'evalState' is already exported from Relude" 2378 | rhs: evalState 2379 | - warn: 2380 | lhs: Control.Monad.State.Strict.evalStateT 2381 | name: "Use 'evalStateT' from Relude" 2382 | note: "'evalStateT' is already exported from Relude" 2383 | rhs: evalStateT 2384 | - warn: 2385 | lhs: Control.Monad.State.Strict.execState 2386 | name: "Use 'execState' from Relude" 2387 | note: "'execState' is already exported from Relude" 2388 | rhs: execState 2389 | - warn: 2390 | lhs: Control.Monad.State.Strict.execStateT 2391 | name: "Use 'execStateT' from Relude" 2392 | note: "'execStateT' is already exported from Relude" 2393 | rhs: execStateT 2394 | - warn: 2395 | lhs: Control.Monad.State.Strict.get 2396 | name: "Use 'get' from Relude" 2397 | note: "'get' is already exported from Relude" 2398 | rhs: get 2399 | - warn: 2400 | lhs: Control.Monad.State.Strict.gets 2401 | name: "Use 'gets' from Relude" 2402 | note: "'gets' is already exported from Relude" 2403 | rhs: gets 2404 | - warn: 2405 | lhs: Control.Monad.State.Strict.modify 2406 | name: "Use 'modify' from Relude" 2407 | note: "'modify' is already exported from Relude" 2408 | rhs: modify 2409 | - warn: 2410 | lhs: "Control.Monad.State.Strict.modify'" 2411 | name: "Use 'modify'' from Relude" 2412 | note: "'modify'' is already exported from Relude" 2413 | rhs: "modify'" 2414 | - warn: 2415 | lhs: Control.Monad.State.Strict.put 2416 | name: "Use 'put' from Relude" 2417 | note: "'put' is already exported from Relude" 2418 | rhs: put 2419 | - warn: 2420 | lhs: Control.Monad.State.Strict.runState 2421 | name: "Use 'runState' from Relude" 2422 | note: "'runState' is already exported from Relude" 2423 | rhs: runState 2424 | - warn: 2425 | lhs: Control.Monad.State.Strict.state 2426 | name: "Use 'state' from Relude" 2427 | note: "'state' is already exported from Relude" 2428 | rhs: state 2429 | - warn: 2430 | lhs: Control.Monad.State.Strict.withState 2431 | name: "Use 'withState' from Relude" 2432 | note: "'withState' is already exported from Relude" 2433 | rhs: withState 2434 | - warn: 2435 | lhs: Control.Monad.Trans.MonadIO 2436 | name: "Use 'MonadIO' from Relude" 2437 | note: "'MonadIO' is already exported from Relude" 2438 | rhs: MonadIO 2439 | - warn: 2440 | lhs: Control.Monad.Trans.MonadTrans 2441 | name: "Use 'MonadTrans' from Relude" 2442 | note: "'MonadTrans' is already exported from Relude" 2443 | rhs: MonadTrans 2444 | - warn: 2445 | lhs: Control.Monad.Trans.lift 2446 | name: "Use 'lift' from Relude" 2447 | note: "'lift' is already exported from Relude" 2448 | rhs: lift 2449 | - warn: 2450 | lhs: Control.Monad.Trans.liftIO 2451 | name: "Use 'liftIO' from Relude" 2452 | note: "'liftIO' is already exported from Relude" 2453 | rhs: liftIO 2454 | - warn: 2455 | lhs: Control.Monad.Trans.Identity.IdentityT 2456 | name: "Use 'IdentityT' from Relude" 2457 | note: "'IdentityT' is already exported from Relude" 2458 | rhs: IdentityT 2459 | - warn: 2460 | lhs: Control.Monad.Trans.Identity.runIdentityT 2461 | name: "Use 'runIdentityT' from Relude" 2462 | note: "'runIdentityT' is already exported from Relude" 2463 | rhs: runIdentityT 2464 | - warn: 2465 | lhs: Control.Monad.Trans.Maybe.MaybeT 2466 | name: "Use 'MaybeT' from Relude" 2467 | note: "'MaybeT' is already exported from Relude" 2468 | rhs: MaybeT 2469 | - warn: 2470 | lhs: Control.Monad.Trans.Maybe.maybeToExceptT 2471 | name: "Use 'maybeToExceptT' from Relude" 2472 | note: "'maybeToExceptT' is already exported from Relude" 2473 | rhs: maybeToExceptT 2474 | - warn: 2475 | lhs: Control.Monad.Trans.Maybe.exceptToMaybeT 2476 | name: "Use 'exceptToMaybeT' from Relude" 2477 | note: "'exceptToMaybeT' is already exported from Relude" 2478 | rhs: exceptToMaybeT 2479 | - warn: 2480 | lhs: Control.Monad.MonadPlus 2481 | name: "Use 'MonadPlus' from Relude" 2482 | note: "'MonadPlus' is already exported from Relude" 2483 | rhs: MonadPlus 2484 | - warn: 2485 | lhs: Control.Monad.mzero 2486 | name: "Use 'mzero' from Relude" 2487 | note: "'mzero' is already exported from Relude" 2488 | rhs: mzero 2489 | - warn: 2490 | lhs: Control.Monad.mplus 2491 | name: "Use 'mplus' from Relude" 2492 | note: "'mplus' is already exported from Relude" 2493 | rhs: mplus 2494 | - warn: 2495 | lhs: Control.Monad.filterM 2496 | name: "Use 'filterM' from Relude" 2497 | note: "'filterM' is already exported from Relude" 2498 | rhs: filterM 2499 | - warn: 2500 | lhs: Control.Monad.forever 2501 | name: "Use 'forever' from Relude" 2502 | note: "'forever' is already exported from Relude" 2503 | rhs: forever 2504 | - warn: 2505 | lhs: Control.Monad.join 2506 | name: "Use 'join' from Relude" 2507 | note: "'join' is already exported from Relude" 2508 | rhs: join 2509 | - warn: 2510 | lhs: Control.Monad.mapAndUnzipM 2511 | name: "Use 'mapAndUnzipM' from Relude" 2512 | note: "'mapAndUnzipM' is already exported from Relude" 2513 | rhs: mapAndUnzipM 2514 | - warn: 2515 | lhs: Control.Monad.mfilter 2516 | name: "Use 'mfilter' from Relude" 2517 | note: "'mfilter' is already exported from Relude" 2518 | rhs: mfilter 2519 | - warn: 2520 | lhs: Control.Monad.replicateM 2521 | name: "Use 'replicateM' from Relude" 2522 | note: "'replicateM' is already exported from Relude" 2523 | rhs: replicateM 2524 | - warn: 2525 | lhs: Control.Monad.replicateM_ 2526 | name: "Use 'replicateM_' from Relude" 2527 | note: "'replicateM_' is already exported from Relude" 2528 | rhs: replicateM_ 2529 | - warn: 2530 | lhs: Control.Monad.zipWithM 2531 | name: "Use 'zipWithM' from Relude" 2532 | note: "'zipWithM' is already exported from Relude" 2533 | rhs: zipWithM 2534 | - warn: 2535 | lhs: Control.Monad.zipWithM_ 2536 | name: "Use 'zipWithM_' from Relude" 2537 | note: "'zipWithM_' is already exported from Relude" 2538 | rhs: zipWithM_ 2539 | - warn: 2540 | lhs: "(Control.Monad.<$!>)" 2541 | name: "Use '<$!>' from Relude" 2542 | note: "Operator '(<$!>)' is already exported from Relude" 2543 | rhs: "(<$!>)" 2544 | - warn: 2545 | lhs: "(Control.Monad.<=<)" 2546 | name: "Use '<=<' from Relude" 2547 | note: "Operator '(<=<)' is already exported from Relude" 2548 | rhs: "(<=<)" 2549 | - warn: 2550 | lhs: "(Control.Monad.=<<)" 2551 | name: "Use '=<<' from Relude" 2552 | note: "Operator '(=<<)' is already exported from Relude" 2553 | rhs: "(=<<)" 2554 | - warn: 2555 | lhs: "(Control.Monad.>=>)" 2556 | name: "Use '>=>' from Relude" 2557 | note: "Operator '(>=>)' is already exported from Relude" 2558 | rhs: "(>=>)" 2559 | - warn: 2560 | lhs: Control.Monad.Fail.MonadFail 2561 | name: "Use 'MonadFail' from Relude" 2562 | note: "'MonadFail' is already exported from Relude" 2563 | rhs: MonadFail 2564 | - warn: 2565 | lhs: Data.Maybe.catMaybes 2566 | name: "Use 'catMaybes' from Relude" 2567 | note: "'catMaybes' is already exported from Relude" 2568 | rhs: catMaybes 2569 | - warn: 2570 | lhs: Data.Maybe.fromMaybe 2571 | name: "Use 'fromMaybe' from Relude" 2572 | note: "'fromMaybe' is already exported from Relude" 2573 | rhs: fromMaybe 2574 | - warn: 2575 | lhs: Data.Maybe.isJust 2576 | name: "Use 'isJust' from Relude" 2577 | note: "'isJust' is already exported from Relude" 2578 | rhs: isJust 2579 | - warn: 2580 | lhs: Data.Maybe.isNothing 2581 | name: "Use 'isNothing' from Relude" 2582 | note: "'isNothing' is already exported from Relude" 2583 | rhs: isNothing 2584 | - warn: 2585 | lhs: Data.Maybe.listToMaybe 2586 | name: "Use 'listToMaybe' from Relude" 2587 | note: "'listToMaybe' is already exported from Relude" 2588 | rhs: listToMaybe 2589 | - warn: 2590 | lhs: Data.Maybe.mapMaybe 2591 | name: "Use 'mapMaybe' from Relude" 2592 | note: "'mapMaybe' is already exported from Relude" 2593 | rhs: mapMaybe 2594 | - warn: 2595 | lhs: Data.Maybe.maybeToList 2596 | name: "Use 'maybeToList' from Relude" 2597 | note: "'maybeToList' is already exported from Relude" 2598 | rhs: maybeToList 2599 | - warn: 2600 | lhs: Data.Either.isLeft 2601 | name: "Use 'isLeft' from Relude" 2602 | note: "'isLeft' is already exported from Relude" 2603 | rhs: isLeft 2604 | - warn: 2605 | lhs: Data.Either.isRight 2606 | name: "Use 'isRight' from Relude" 2607 | note: "'isRight' is already exported from Relude" 2608 | rhs: isRight 2609 | - warn: 2610 | lhs: Data.Either.lefts 2611 | name: "Use 'lefts' from Relude" 2612 | note: "'lefts' is already exported from Relude" 2613 | rhs: lefts 2614 | - warn: 2615 | lhs: Data.Either.partitionEithers 2616 | name: "Use 'partitionEithers' from Relude" 2617 | note: "'partitionEithers' is already exported from Relude" 2618 | rhs: partitionEithers 2619 | - warn: 2620 | lhs: Data.Either.rights 2621 | name: "Use 'rights' from Relude" 2622 | note: "'rights' is already exported from Relude" 2623 | rhs: rights 2624 | - warn: 2625 | lhs: Data.Monoid.All 2626 | name: "Use 'All' from Relude" 2627 | note: "'All' is already exported from Relude" 2628 | rhs: All 2629 | - warn: 2630 | lhs: Data.Monoid.getAll 2631 | name: "Use 'getAll' from Relude" 2632 | note: "'getAll' is already exported from Relude" 2633 | rhs: getAll 2634 | - warn: 2635 | lhs: Data.Monoid.Alt 2636 | name: "Use 'Alt' from Relude" 2637 | note: "'Alt' is already exported from Relude" 2638 | rhs: Alt 2639 | - warn: 2640 | lhs: Data.Monoid.getAlt 2641 | name: "Use 'getAlt' from Relude" 2642 | note: "'getAlt' is already exported from Relude" 2643 | rhs: getAlt 2644 | - warn: 2645 | lhs: Data.Monoid.Any 2646 | name: "Use 'Any' from Relude" 2647 | note: "'Any' is already exported from Relude" 2648 | rhs: Any 2649 | - warn: 2650 | lhs: Data.Monoid.getAny 2651 | name: "Use 'getAny' from Relude" 2652 | note: "'getAny' is already exported from Relude" 2653 | rhs: getAny 2654 | - warn: 2655 | lhs: Data.Monoid.Ap 2656 | name: "Use 'Ap' from Relude" 2657 | note: "'Ap' is already exported from Relude" 2658 | rhs: Ap 2659 | - warn: 2660 | lhs: Data.Monoid.getAp 2661 | name: "Use 'getAp' from Relude" 2662 | note: "'getAp' is already exported from Relude" 2663 | rhs: getAp 2664 | - warn: 2665 | lhs: Data.Monoid.Dual 2666 | name: "Use 'Dual' from Relude" 2667 | note: "'Dual' is already exported from Relude" 2668 | rhs: Dual 2669 | - warn: 2670 | lhs: Data.Monoid.getDual 2671 | name: "Use 'getDual' from Relude" 2672 | note: "'getDual' is already exported from Relude" 2673 | rhs: getDual 2674 | - warn: 2675 | lhs: Data.Monoid.Endo 2676 | name: "Use 'Endo' from Relude" 2677 | note: "'Endo' is already exported from Relude" 2678 | rhs: Endo 2679 | - warn: 2680 | lhs: Data.Monoid.appEndo 2681 | name: "Use 'appEndo' from Relude" 2682 | note: "'appEndo' is already exported from Relude" 2683 | rhs: appEndo 2684 | - warn: 2685 | lhs: Data.Monoid.First 2686 | name: "Use 'First' from Relude" 2687 | note: "'First' is already exported from Relude" 2688 | rhs: First 2689 | - warn: 2690 | lhs: Data.Monoid.getFirst 2691 | name: "Use 'getFirst' from Relude" 2692 | note: "'getFirst' is already exported from Relude" 2693 | rhs: getFirst 2694 | - warn: 2695 | lhs: Data.Monoid.Last 2696 | name: "Use 'Last' from Relude" 2697 | note: "'Last' is already exported from Relude" 2698 | rhs: Last 2699 | - warn: 2700 | lhs: Data.Monoid.getLast 2701 | name: "Use 'getLast' from Relude" 2702 | note: "'getLast' is already exported from Relude" 2703 | rhs: getLast 2704 | - warn: 2705 | lhs: Data.Monoid.Product 2706 | name: "Use 'Product' from Relude" 2707 | note: "'Product' is already exported from Relude" 2708 | rhs: Product 2709 | - warn: 2710 | lhs: Data.Monoid.getProduct 2711 | name: "Use 'getProduct' from Relude" 2712 | note: "'getProduct' is already exported from Relude" 2713 | rhs: getProduct 2714 | - warn: 2715 | lhs: Data.Monoid.Sum 2716 | name: "Use 'Sum' from Relude" 2717 | note: "'Sum' is already exported from Relude" 2718 | rhs: Sum 2719 | - warn: 2720 | lhs: Data.Monoid.getSum 2721 | name: "Use 'getSum' from Relude" 2722 | note: "'getSum' is already exported from Relude" 2723 | rhs: getSum 2724 | - warn: 2725 | lhs: Data.Semigroup.Semigroup 2726 | name: "Use 'Semigroup' from Relude" 2727 | note: "'Semigroup' is already exported from Relude" 2728 | rhs: Semigroup 2729 | - warn: 2730 | lhs: Data.Semigroup.sconcat 2731 | name: "Use 'sconcat' from Relude" 2732 | note: "'sconcat' is already exported from Relude" 2733 | rhs: sconcat 2734 | - warn: 2735 | lhs: Data.Semigroup.stimes 2736 | name: "Use 'stimes' from Relude" 2737 | note: "'stimes' is already exported from Relude" 2738 | rhs: stimes 2739 | - warn: 2740 | lhs: "(Data.Semigroup.<>)" 2741 | name: "Use '<>' from Relude" 2742 | note: "Operator '(<>)' is already exported from Relude" 2743 | rhs: "(<>)" 2744 | - warn: 2745 | lhs: Data.Semigroup.WrappedMonoid 2746 | name: "Use 'WrappedMonoid' from Relude" 2747 | note: "'WrappedMonoid' is already exported from Relude" 2748 | rhs: WrappedMonoid 2749 | - warn: 2750 | lhs: Data.Semigroup.cycle1 2751 | name: "Use 'cycle1' from Relude" 2752 | note: "'cycle1' is already exported from Relude" 2753 | rhs: cycle1 2754 | - warn: 2755 | lhs: Data.Semigroup.mtimesDefault 2756 | name: "Use 'mtimesDefault' from Relude" 2757 | note: "'mtimesDefault' is already exported from Relude" 2758 | rhs: mtimesDefault 2759 | - warn: 2760 | lhs: Data.Semigroup.stimesIdempotent 2761 | name: "Use 'stimesIdempotent' from Relude" 2762 | note: "'stimesIdempotent' is already exported from Relude" 2763 | rhs: stimesIdempotent 2764 | - warn: 2765 | lhs: Data.Semigroup.stimesIdempotentMonoid 2766 | name: "Use 'stimesIdempotentMonoid' from Relude" 2767 | note: "'stimesIdempotentMonoid' is already exported from Relude" 2768 | rhs: stimesIdempotentMonoid 2769 | - warn: 2770 | lhs: Data.Semigroup.stimesMonoid 2771 | name: "Use 'stimesMonoid' from Relude" 2772 | note: "'stimesMonoid' is already exported from Relude" 2773 | rhs: stimesMonoid 2774 | - warn: 2775 | lhs: Data.ByteString.ByteString 2776 | name: "Use 'ByteString' from Relude" 2777 | note: "'ByteString' is already exported from Relude" 2778 | rhs: ByteString 2779 | - warn: 2780 | lhs: Data.ByteString.Short.ShortByteString 2781 | name: "Use 'ShortByteString' from Relude" 2782 | note: "'ShortByteString' is already exported from Relude" 2783 | rhs: ShortByteString 2784 | - warn: 2785 | lhs: Data.ByteString.Short.toShort 2786 | name: "Use 'toShort' from Relude" 2787 | note: "'toShort' is already exported from Relude" 2788 | rhs: toShort 2789 | - warn: 2790 | lhs: Data.ByteString.Short.fromShort 2791 | name: "Use 'fromShort' from Relude" 2792 | note: "'fromShort' is already exported from Relude" 2793 | rhs: fromShort 2794 | - warn: 2795 | lhs: Data.String.IsString 2796 | name: "Use 'IsString' from Relude" 2797 | note: "'IsString' is already exported from Relude" 2798 | rhs: IsString 2799 | - warn: 2800 | lhs: Data.String.fromString 2801 | name: "Use 'fromString' from Relude" 2802 | note: "'fromString' is already exported from Relude" 2803 | rhs: fromString 2804 | - warn: 2805 | lhs: Data.Text.Text 2806 | name: "Use 'Text' from Relude" 2807 | note: "'Text' is already exported from Relude" 2808 | rhs: Text 2809 | - warn: 2810 | lhs: Data.Text.lines 2811 | name: "Use 'lines' from Relude" 2812 | note: "'lines' is already exported from Relude" 2813 | rhs: lines 2814 | - warn: 2815 | lhs: Data.Text.unlines 2816 | name: "Use 'unlines' from Relude" 2817 | note: "'unlines' is already exported from Relude" 2818 | rhs: unlines 2819 | - warn: 2820 | lhs: Data.Text.words 2821 | name: "Use 'words' from Relude" 2822 | note: "'words' is already exported from Relude" 2823 | rhs: words 2824 | - warn: 2825 | lhs: Data.Text.unwords 2826 | name: "Use 'unwords' from Relude" 2827 | note: "'unwords' is already exported from Relude" 2828 | rhs: unwords 2829 | - warn: 2830 | lhs: "Data.Text.Encoding.decodeUtf8'" 2831 | name: "Use 'decodeUtf8'' from Relude" 2832 | note: "'decodeUtf8'' is already exported from Relude" 2833 | rhs: "decodeUtf8'" 2834 | - warn: 2835 | lhs: Data.Text.Encoding.decodeUtf8With 2836 | name: "Use 'decodeUtf8With' from Relude" 2837 | note: "'decodeUtf8With' is already exported from Relude" 2838 | rhs: decodeUtf8With 2839 | - warn: 2840 | lhs: Data.Text.Encoding.Error.OnDecodeError 2841 | name: "Use 'OnDecodeError' from Relude" 2842 | note: "'OnDecodeError' is already exported from Relude" 2843 | rhs: OnDecodeError 2844 | - warn: 2845 | lhs: Data.Text.Encoding.Error.OnError 2846 | name: "Use 'OnError' from Relude" 2847 | note: "'OnError' is already exported from Relude" 2848 | rhs: OnError 2849 | - warn: 2850 | lhs: Data.Text.Encoding.Error.UnicodeException 2851 | name: "Use 'UnicodeException' from Relude" 2852 | note: "'UnicodeException' is already exported from Relude" 2853 | rhs: UnicodeException 2854 | - warn: 2855 | lhs: Data.Text.Encoding.Error.lenientDecode 2856 | name: "Use 'lenientDecode' from Relude" 2857 | note: "'lenientDecode' is already exported from Relude" 2858 | rhs: lenientDecode 2859 | - warn: 2860 | lhs: Data.Text.Encoding.Error.strictDecode 2861 | name: "Use 'strictDecode' from Relude" 2862 | note: "'strictDecode' is already exported from Relude" 2863 | rhs: strictDecode 2864 | - warn: 2865 | lhs: Text.Read.Read 2866 | name: "Use 'Read' from Relude" 2867 | note: "'Read' is already exported from Relude" 2868 | rhs: Read 2869 | - warn: 2870 | lhs: Text.Read.readMaybe 2871 | name: "Use 'readMaybe' from Relude" 2872 | note: "'readMaybe' is already exported from Relude" 2873 | rhs: readMaybe 2874 | - warn: 2875 | lhs: "(liftIO (newEmptyMVar ))" 2876 | name: "'liftIO' is not needed" 2877 | note: "If you import 'newEmptyMVar' from Relude, it's already lifted" 2878 | rhs: newEmptyMVar 2879 | - warn: 2880 | lhs: "(liftIO (newMVar x))" 2881 | name: "'liftIO' is not needed" 2882 | note: "If you import 'newMVar' from Relude, it's already lifted" 2883 | rhs: newMVar 2884 | - warn: 2885 | lhs: "(liftIO (putMVar x y))" 2886 | name: "'liftIO' is not needed" 2887 | note: "If you import 'putMVar' from Relude, it's already lifted" 2888 | rhs: putMVar 2889 | - warn: 2890 | lhs: "(liftIO (readMVar x))" 2891 | name: "'liftIO' is not needed" 2892 | note: "If you import 'readMVar' from Relude, it's already lifted" 2893 | rhs: readMVar 2894 | - warn: 2895 | lhs: "(liftIO (swapMVar x y))" 2896 | name: "'liftIO' is not needed" 2897 | note: "If you import 'swapMVar' from Relude, it's already lifted" 2898 | rhs: swapMVar 2899 | - warn: 2900 | lhs: "(liftIO (takeMVar x))" 2901 | name: "'liftIO' is not needed" 2902 | note: "If you import 'takeMVar' from Relude, it's already lifted" 2903 | rhs: takeMVar 2904 | - warn: 2905 | lhs: "(liftIO (tryPutMVar x y))" 2906 | name: "'liftIO' is not needed" 2907 | note: "If you import 'tryPutMVar' from Relude, it's already lifted" 2908 | rhs: tryPutMVar 2909 | - warn: 2910 | lhs: "(liftIO (tryReadMVar x))" 2911 | name: "'liftIO' is not needed" 2912 | note: "If you import 'tryReadMVar' from Relude, it's already lifted" 2913 | rhs: tryReadMVar 2914 | - warn: 2915 | lhs: "(liftIO (tryTakeMVar x))" 2916 | name: "'liftIO' is not needed" 2917 | note: "If you import 'tryTakeMVar' from Relude, it's already lifted" 2918 | rhs: tryTakeMVar 2919 | - warn: 2920 | lhs: "(liftIO (atomically x))" 2921 | name: "'liftIO' is not needed" 2922 | note: "If you import 'atomically' from Relude, it's already lifted" 2923 | rhs: atomically 2924 | - warn: 2925 | lhs: "(liftIO (newTVarIO x))" 2926 | name: "'liftIO' is not needed" 2927 | note: "If you import 'newTVarIO' from Relude, it's already lifted" 2928 | rhs: newTVarIO 2929 | - warn: 2930 | lhs: "(liftIO (readTVarIO x))" 2931 | name: "'liftIO' is not needed" 2932 | note: "If you import 'readTVarIO' from Relude, it's already lifted" 2933 | rhs: readTVarIO 2934 | - warn: 2935 | lhs: "(liftIO (newTMVarIO x))" 2936 | name: "'liftIO' is not needed" 2937 | note: "If you import 'newTMVarIO' from Relude, it's already lifted" 2938 | rhs: newTMVarIO 2939 | - warn: 2940 | lhs: "(liftIO (newEmptyTMVarIO ))" 2941 | name: "'liftIO' is not needed" 2942 | note: "If you import 'newEmptyTMVarIO' from Relude, it's already lifted" 2943 | rhs: newEmptyTMVarIO 2944 | - warn: 2945 | lhs: "(liftIO (exitWith x))" 2946 | name: "'liftIO' is not needed" 2947 | note: "If you import 'exitWith' from Relude, it's already lifted" 2948 | rhs: exitWith 2949 | - warn: 2950 | lhs: "(liftIO (exitFailure ))" 2951 | name: "'liftIO' is not needed" 2952 | note: "If you import 'exitFailure' from Relude, it's already lifted" 2953 | rhs: exitFailure 2954 | - warn: 2955 | lhs: "(liftIO (exitSuccess ))" 2956 | name: "'liftIO' is not needed" 2957 | note: "If you import 'exitSuccess' from Relude, it's already lifted" 2958 | rhs: exitSuccess 2959 | - warn: 2960 | lhs: "(liftIO (die x))" 2961 | name: "'liftIO' is not needed" 2962 | note: "If you import 'die' from Relude, it's already lifted" 2963 | rhs: die 2964 | - warn: 2965 | lhs: "(liftIO (readFile x))" 2966 | name: "'liftIO' is not needed" 2967 | note: "If you import 'readFile' from Relude, it's already lifted" 2968 | rhs: readFile 2969 | - warn: 2970 | lhs: "(liftIO (writeFile x y))" 2971 | name: "'liftIO' is not needed" 2972 | note: "If you import 'writeFile' from Relude, it's already lifted" 2973 | rhs: writeFile 2974 | - warn: 2975 | lhs: "(liftIO (appendFile x y))" 2976 | name: "'liftIO' is not needed" 2977 | note: "If you import 'appendFile' from Relude, it's already lifted" 2978 | rhs: appendFile 2979 | - warn: 2980 | lhs: "(liftIO (readFileText x))" 2981 | name: "'liftIO' is not needed" 2982 | note: "If you import 'readFileText' from Relude, it's already lifted" 2983 | rhs: readFileText 2984 | - warn: 2985 | lhs: "(liftIO (writeFileText x y))" 2986 | name: "'liftIO' is not needed" 2987 | note: "If you import 'writeFileText' from Relude, it's already lifted" 2988 | rhs: writeFileText 2989 | - warn: 2990 | lhs: "(liftIO (appendFileText x y))" 2991 | name: "'liftIO' is not needed" 2992 | note: "If you import 'appendFileText' from Relude, it's already lifted" 2993 | rhs: appendFileText 2994 | - warn: 2995 | lhs: "(liftIO (readFileLText x))" 2996 | name: "'liftIO' is not needed" 2997 | note: "If you import 'readFileLText' from Relude, it's already lifted" 2998 | rhs: readFileLText 2999 | - warn: 3000 | lhs: "(liftIO (writeFileLText x y))" 3001 | name: "'liftIO' is not needed" 3002 | note: "If you import 'writeFileLText' from Relude, it's already lifted" 3003 | rhs: writeFileLText 3004 | - warn: 3005 | lhs: "(liftIO (appendFileLText x y))" 3006 | name: "'liftIO' is not needed" 3007 | note: "If you import 'appendFileLText' from Relude, it's already lifted" 3008 | rhs: appendFileLText 3009 | - warn: 3010 | lhs: "(liftIO (readFileBS x))" 3011 | name: "'liftIO' is not needed" 3012 | note: "If you import 'readFileBS' from Relude, it's already lifted" 3013 | rhs: readFileBS 3014 | - warn: 3015 | lhs: "(liftIO (writeFileBS x y))" 3016 | name: "'liftIO' is not needed" 3017 | note: "If you import 'writeFileBS' from Relude, it's already lifted" 3018 | rhs: writeFileBS 3019 | - warn: 3020 | lhs: "(liftIO (appendFileBS x y))" 3021 | name: "'liftIO' is not needed" 3022 | note: "If you import 'appendFileBS' from Relude, it's already lifted" 3023 | rhs: appendFileBS 3024 | - warn: 3025 | lhs: "(liftIO (readFileLBS x))" 3026 | name: "'liftIO' is not needed" 3027 | note: "If you import 'readFileLBS' from Relude, it's already lifted" 3028 | rhs: readFileLBS 3029 | - warn: 3030 | lhs: "(liftIO (writeFileLBS x y))" 3031 | name: "'liftIO' is not needed" 3032 | note: "If you import 'writeFileLBS' from Relude, it's already lifted" 3033 | rhs: writeFileLBS 3034 | - warn: 3035 | lhs: "(liftIO (appendFileLBS x y))" 3036 | name: "'liftIO' is not needed" 3037 | note: "If you import 'appendFileLBS' from Relude, it's already lifted" 3038 | rhs: appendFileLBS 3039 | - warn: 3040 | lhs: "(liftIO (newIORef x))" 3041 | name: "'liftIO' is not needed" 3042 | note: "If you import 'newIORef' from Relude, it's already lifted" 3043 | rhs: newIORef 3044 | - warn: 3045 | lhs: "(liftIO (readIORef x))" 3046 | name: "'liftIO' is not needed" 3047 | note: "If you import 'readIORef' from Relude, it's already lifted" 3048 | rhs: readIORef 3049 | - warn: 3050 | lhs: "(liftIO (writeIORef x y))" 3051 | name: "'liftIO' is not needed" 3052 | note: "If you import 'writeIORef' from Relude, it's already lifted" 3053 | rhs: writeIORef 3054 | - warn: 3055 | lhs: "(liftIO (modifyIORef x y))" 3056 | name: "'liftIO' is not needed" 3057 | note: "If you import 'modifyIORef' from Relude, it's already lifted" 3058 | rhs: modifyIORef 3059 | - warn: 3060 | lhs: "(liftIO (modifyIORef' x y))" 3061 | name: "'liftIO' is not needed" 3062 | note: "If you import 'modifyIORef'' from Relude, it's already lifted" 3063 | rhs: "modifyIORef'" 3064 | - warn: 3065 | lhs: "(liftIO (atomicModifyIORef x y))" 3066 | name: "'liftIO' is not needed" 3067 | note: "If you import 'atomicModifyIORef' from Relude, it's already lifted" 3068 | rhs: atomicModifyIORef 3069 | - warn: 3070 | lhs: "(liftIO (atomicModifyIORef' x y))" 3071 | name: "'liftIO' is not needed" 3072 | note: "If you import 'atomicModifyIORef'' from Relude, it's already lifted" 3073 | rhs: "atomicModifyIORef'" 3074 | - warn: 3075 | lhs: "(liftIO (atomicWriteIORef x y))" 3076 | name: "'liftIO' is not needed" 3077 | note: "If you import 'atomicWriteIORef' from Relude, it's already lifted" 3078 | rhs: atomicWriteIORef 3079 | - warn: 3080 | lhs: "(liftIO (getLine ))" 3081 | name: "'liftIO' is not needed" 3082 | note: "If you import 'getLine' from Relude, it's already lifted" 3083 | rhs: getLine 3084 | - warn: 3085 | lhs: "(liftIO (print x))" 3086 | name: "'liftIO' is not needed" 3087 | note: "If you import 'print' from Relude, it's already lifted" 3088 | rhs: print 3089 | - warn: 3090 | lhs: "(liftIO (putStr x))" 3091 | name: "'liftIO' is not needed" 3092 | note: "If you import 'putStr' from Relude, it's already lifted" 3093 | rhs: putStr 3094 | - warn: 3095 | lhs: "(liftIO (putStrLn x))" 3096 | name: "'liftIO' is not needed" 3097 | note: "If you import 'putStrLn' from Relude, it's already lifted" 3098 | rhs: putStrLn 3099 | - warn: 3100 | lhs: "(liftIO (putText x))" 3101 | name: "'liftIO' is not needed" 3102 | note: "If you import 'putText' from Relude, it's already lifted" 3103 | rhs: putText 3104 | - warn: 3105 | lhs: "(liftIO (putTextLn x))" 3106 | name: "'liftIO' is not needed" 3107 | note: "If you import 'putTextLn' from Relude, it's already lifted" 3108 | rhs: putTextLn 3109 | - warn: 3110 | lhs: "(liftIO (putLText x))" 3111 | name: "'liftIO' is not needed" 3112 | note: "If you import 'putLText' from Relude, it's already lifted" 3113 | rhs: putLText 3114 | - warn: 3115 | lhs: "(liftIO (putLTextLn x))" 3116 | name: "'liftIO' is not needed" 3117 | note: "If you import 'putLTextLn' from Relude, it's already lifted" 3118 | rhs: putLTextLn 3119 | - warn: 3120 | lhs: "(liftIO (putBS x))" 3121 | name: "'liftIO' is not needed" 3122 | note: "If you import 'putBS' from Relude, it's already lifted" 3123 | rhs: putBS 3124 | - warn: 3125 | lhs: "(liftIO (putBSLn x))" 3126 | name: "'liftIO' is not needed" 3127 | note: "If you import 'putBSLn' from Relude, it's already lifted" 3128 | rhs: putBSLn 3129 | - warn: 3130 | lhs: "(liftIO (putLBS x))" 3131 | name: "'liftIO' is not needed" 3132 | note: "If you import 'putLBS' from Relude, it's already lifted" 3133 | rhs: putLBS 3134 | - warn: 3135 | lhs: "(liftIO (putLBSLn x))" 3136 | name: "'liftIO' is not needed" 3137 | note: "If you import 'putLBSLn' from Relude, it's already lifted" 3138 | rhs: putLBSLn 3139 | - warn: 3140 | lhs: "(liftIO (hFlush x))" 3141 | name: "'liftIO' is not needed" 3142 | note: "If you import 'hFlush' from Relude, it's already lifted" 3143 | rhs: hFlush 3144 | - warn: 3145 | lhs: "(liftIO (hIsEOF x))" 3146 | name: "'liftIO' is not needed" 3147 | note: "If you import 'hIsEOF' from Relude, it's already lifted" 3148 | rhs: hIsEOF 3149 | - warn: 3150 | lhs: "(liftIO (hSetBuffering x y))" 3151 | name: "'liftIO' is not needed" 3152 | note: "If you import 'hSetBuffering' from Relude, it's already lifted" 3153 | rhs: hSetBuffering 3154 | - warn: 3155 | lhs: "(liftIO (hGetBuffering x))" 3156 | name: "'liftIO' is not needed" 3157 | note: "If you import 'hGetBuffering' from Relude, it's already lifted" 3158 | rhs: hGetBuffering 3159 | - warn: 3160 | lhs: "(liftIO (getArgs ))" 3161 | name: "'liftIO' is not needed" 3162 | note: "If you import 'getArgs' from Relude, it's already lifted" 3163 | rhs: getArgs 3164 | - warn: 3165 | lhs: "(liftIO (lookupEnv x))" 3166 | name: "'liftIO' is not needed" 3167 | note: "If you import 'lookupEnv' from Relude, it's already lifted" 3168 | rhs: lookupEnv 3169 | - hint: 3170 | lhs: "fmap (bimap f g)" 3171 | note: "Use `bimapF` from `Relude.Extra.Bifunctor`" 3172 | rhs: bimapF f g 3173 | - hint: 3174 | lhs: "bimap f g <$> x" 3175 | note: "Use `bimapF` from `Relude.Extra.Bifunctor`" 3176 | rhs: bimapF f g x 3177 | - hint: 3178 | lhs: "fmap (first f)" 3179 | note: "Use `firstF` from `Relude.Extra.Bifunctor`" 3180 | rhs: firstF f 3181 | - hint: 3182 | lhs: fmap . first 3183 | note: "Use `firstF` from `Relude.Extra.Bifunctor`" 3184 | rhs: firstF 3185 | - hint: 3186 | lhs: "fmap (second f)" 3187 | note: "Use `secondF` from `Relude.Extra.Bifunctor`" 3188 | rhs: secondF f 3189 | - hint: 3190 | lhs: fmap . second 3191 | note: "Use `secondF` from `Relude.Extra.Bifunctor`" 3192 | rhs: secondF 3193 | - hint: 3194 | lhs: "[minBound .. maxBound]" 3195 | note: "Use `universe` from `Relude.Extra.Enum`" 3196 | rhs: universe 3197 | - hint: 3198 | lhs: succ 3199 | note: "`succ` from `Prelude` is a pure function but it may throw exception. Consider using `next` from `Relude.Extra.Enum` instead." 3200 | rhs: next 3201 | - hint: 3202 | lhs: pred 3203 | note: "`pred` from `Prelude` is a pure function but it may throw exception. Consider using `prev` from `Relude.Extra.Enum` instead." 3204 | rhs: prev 3205 | - hint: 3206 | lhs: toEnum 3207 | note: "`toEnum` from `Prelude` is a pure function but it may throw exception. Consider using `safeToEnum` from `Relude.Extra.Enum` instead." 3208 | rhs: safeToEnum 3209 | - hint: 3210 | lhs: sum xs / length xs 3211 | note: "Use `average` from `Relude.Extra.Foldable`" 3212 | rhs: average xs 3213 | - hint: 3214 | lhs: "\\a -> (a, a)" 3215 | note: "Use `dup` from `Relude.Extra.Tuple`" 3216 | rhs: dup 3217 | - hint: 3218 | lhs: "\\a -> (f a, a)" 3219 | note: "Use `toFst` from `Relude.Extra.Tuple`" 3220 | rhs: toFst f 3221 | - hint: 3222 | lhs: "\\a -> (a, f a)" 3223 | note: "Use `toSnd` from `Relude.Extra.Tuple`" 3224 | rhs: toSnd f 3225 | - hint: 3226 | lhs: fmap . toFst 3227 | note: "Use `fmapToFst` from `Relude.Extra.Tuple`" 3228 | rhs: fmapToFst 3229 | - hint: 3230 | lhs: "fmap (toFst f)" 3231 | note: "Use `fmapToFst` from `Relude.Extra.Tuple`" 3232 | rhs: fmapToFst f 3233 | - hint: 3234 | lhs: fmap . toSnd 3235 | note: "Use `fmapToSnd` from `Relude.Extra.Tuple`" 3236 | rhs: fmapToSnd 3237 | - hint: 3238 | lhs: "fmap (toSnd f)" 3239 | note: "Use `fmapToSnd` from `Relude.Extra.Tuple`" 3240 | rhs: fmapToSnd f 3241 | - hint: 3242 | lhs: map . toFst 3243 | note: "Use `fmapToFst` from `Relude.Extra.Tuple`" 3244 | rhs: fmapToFst 3245 | - hint: 3246 | lhs: "map (toFst f)" 3247 | note: "Use `fmapToFst` from `Relude.Extra.Tuple`" 3248 | rhs: fmapToFst f 3249 | - hint: 3250 | lhs: map . toSnd 3251 | note: "Use `fmapToSnd` from `Relude.Extra.Tuple`" 3252 | rhs: fmapToSnd 3253 | - hint: 3254 | lhs: "map (toSnd f)" 3255 | note: "Use `fmapToSnd` from `Relude.Extra.Tuple`" 3256 | rhs: fmapToSnd f 3257 | - hint: 3258 | lhs: "fmap (,a) (f a)" 3259 | note: "Use `traverseToFst` from `Relude.Extra.Tuple`" 3260 | rhs: traverseToFst f a 3261 | - hint: 3262 | lhs: "fmap (flip (,) a) (f a)" 3263 | note: "Use `traverseToFst` from `Relude.Extra.Tuple`" 3264 | rhs: traverseToFst f a 3265 | - hint: 3266 | lhs: "(,a) <$> f a" 3267 | note: "Use `traverseToFst` from `Relude.Extra.Tuple`" 3268 | rhs: traverseToFst f a 3269 | - hint: 3270 | lhs: "flip (,) a <$> f a" 3271 | note: "Use `traverseToFst` from `Relude.Extra.Tuple`" 3272 | rhs: traverseToFst f a 3273 | - hint: 3274 | lhs: "fmap (a,) (f a)" 3275 | note: "Use `traverseToSnd` from `Relude.Extra.Tuple`" 3276 | rhs: traverseToSnd f a 3277 | - hint: 3278 | lhs: "fmap ((,) a) (f a)" 3279 | note: "Use `traverseToSnd` from `Relude.Extra.Tuple`" 3280 | rhs: traverseToSnd f a 3281 | - hint: 3282 | lhs: "(a,) <$> f a" 3283 | note: "Use `traverseToSnd` from `Relude.Extra.Tuple`" 3284 | rhs: traverseToSnd f a 3285 | - hint: 3286 | lhs: "(,) a <$> f a" 3287 | note: "Use `traverseToSnd` from `Relude.Extra.Tuple`" 3288 | rhs: traverseToSnd f a 3289 | --------------------------------------------------------------------------------