Stan Report

This is the Haskell Static Analysis report generated by Stan

Stan Info

In this section, you can find the general information about the used Stan tool, compile-time and run-time environment variables and settings, including build information, system data and execution configurations.

Stan Version
Version0.1.3.0
Git Revision76e40f2fe61850f543518b3a028d0d11bf944344
Release DateMon Dec 9 20:42:40 2024 +0000
System Info
Operating Systemdarwin
Architectureaarch64
Compilerghc
Compiler Version9.10
Environment
Environment VariablesSTAN_USE_DEFAULT_CONFIG=True
TOML configuration files/Users/kamilzabinski/IdeaProjects/helct/.stan.toml
CLI arguments-s --hide-solution report

Project Info

Information about the analysed project

Project namehelct
Cabal Fileshelct.cabal
HIE Files Directory.hie
Files Number12

Analysis Info

Summary stats from the static analysis

Modules12
LoC467
Extensions30
SafeHaskell Extensions0
Available inspections48
Checked inspections48
Found Observations24
Ignored Observations0

Static Analysis Summary

Here you can find the overall conclusion based on the various metadata and gathered information during the work of Stan on this project.

Observations

Based on the analysis results, Stan found several areas for improvement in the analysed files. In Stan terminology, we call these findings Observations. Below you can see the more detailed information about each observation, and find the possible ways to fix them for your project.

📄 hs/src/HelVM/HelCT/Compilers/LanguageC/Examples/ComputeSize.hs

  • ModuleHelVM.HelCT.Compilers.LanguageC.Examples.ComputeSize
    Lines of Code131
    1. EmptyDataDecls
    2. ExistentialQuantification
    3. FlexibleContexts
    4. FlexibleInstances
    5. FunctionalDependencies
    6. GADTs
    7. GeneralizedNewtypeDeriving
    8. InstanceSigs
    9. KindSignatures
    10. LambdaCase
    11. MultiParamTypeClasses
    12. MultiWayIf
    13. NamedFieldPuns
    14. OverloadedStrings
    15. PartialTypeSignatures
    16. PatternGuards
    17. PolyKinds
    18. RankNTypes
    19. RecordWildCards
    20. ScopedTypeVariables
    21. StandaloneDeriving
    22. TupleSections
    23. TypeFamilies
    24. TypeSynonymInstances
    25. ViewPatterns
    26. TypeOperators
    27. DerivingStrategies
    28. ConstraintKinds
    29. StrictData
    1. PatternGuards
  • Observations

    IDOBS-STAN-0103-FPhlOH-20:11
    SeverityPotentialBug
    DescriptionUsage of the 'length' function that hangs on infinite lists
    Inspection IDSTAN-0103
    Category
    • Infinite
    • List
    Filehs/src/HelVM/HelCT/Compilers/LanguageC/Examples/ComputeSize.hs
      19 ┃ 
      20 ┃     when (length args < 2) usage
      21 ┃           ^^^^^^
    

    Possible solutions

    • Don't use 'length' if you expect your function to work with infinite lists
    • {Extra dependency} Use the 'slist' library for fast and safe functions on infinite lists
    IDOBS-STAN-0020-FPhlOH-21:34
    SeverityWarning
    DescriptionUsage of partial function 'fromList' for
    Inspection IDSTAN-0020
    Category
    • Partial
    Filehs/src/HelVM/HelCT/Compilers/LanguageC/Examples/ComputeSize.hs
      20 ┃ 
      21 ┃     let (pat,args')   = ((head . fromList) &&& (tail . fromList)) args
      22 ┃                                  ^^^^^^^^
    
    IDOBS-STAN-0020-FPhlOH-21:56
    SeverityWarning
    DescriptionUsage of partial function 'fromList' for
    Inspection IDSTAN-0020
    Category
    • Partial
    Filehs/src/HelVM/HelCT/Compilers/LanguageC/Examples/ComputeSize.hs
      20 ┃ 
      21 ┃     let (pat,args')   = ((head . fromList) &&& (tail . fromList)) args
      22 ┃                                                        ^^^^^^^^
    
    IDOBS-STAN-0020-FPhlOH-22:34
    SeverityWarning
    DescriptionUsage of partial function 'fromList' for
    Inspection IDSTAN-0020
    Category
    • Partial
    Filehs/src/HelVM/HelCT/Compilers/LanguageC/Examples/ComputeSize.hs
      21 ┃ 
      22 ┃     let (opts,c_file) = ((init . fromList) &&& (last . fromList)) args'
      23 ┃                                  ^^^^^^^^
    
    IDOBS-STAN-0020-FPhlOH-22:56
    SeverityWarning
    DescriptionUsage of partial function 'fromList' for
    Inspection IDSTAN-0020
    Category
    • Partial
    Filehs/src/HelVM/HelCT/Compilers/LanguageC/Examples/ComputeSize.hs
      21 ┃ 
      22 ┃     let (opts,c_file) = ((init . fromList) &&& (last . fromList)) args'
      23 ┃                                                        ^^^^^^^^
    
    IDOBS-STAN-0213-FPhlOH-62:9
    SeverityWarning
    DescriptionPattern matching on '_' for sum types can create maintainability issues
    Inspection IDSTAN-0213
    Category
    • AntiPattern
    Filehs/src/HelVM/HelCT/Compilers/LanguageC/Examples/ComputeSize.hs
      61 ┃ 
      62 ┃         _ -> Nothing
      63 ┃         ^^^^^^^^^^^^
    

    Possible solutions

    • Pattern match on each constructor explicitly
    • Add meaningful names to holes, e.g. '_anyOtherFailure'
    IDOBS-STAN-0101-FPhlOH-75:69
    SeverityPotentialBug
    DescriptionUsage of the 'reverse' function that hangs on infinite lists
    Inspection IDSTAN-0101
    Category
    • Infinite
    • List
    Filehs/src/HelVM/HelCT/Compilers/LanguageC/Examples/ComputeSize.hs
      74 ┃ 
      75 ┃         let args'@(result',todo',_) = f args in (if null todo' then reverse result' else close args')
      76 ┃                                                                     ^^^^^^^
    

    Possible solutions

    • Don't use 'reverse' if you expect your function to work with infinite lists
    • {Extra dependency} Use the 'slist' library for fast and safe functions on infinite lists
    IDOBS-STAN-0103-FPhlOH-120:98
    SeverityPotentialBug
    DescriptionUsage of the 'length' function that hangs on infinite lists
    Inspection IDSTAN-0103
    Category
    • Infinite
    • List
    Filehs/src/HelVM/HelCT/Compilers/LanguageC/Examples/ComputeSize.hs
     119 ┃ 
     120 ┃     fromExtDecl (CTranslUnit decls _)   = error $ "Expected one declaration, but found: "<>show (length decls)
     121 ┃                                                                                                  ^^^^^^
    

    Possible solutions

    • Don't use 'length' if you expect your function to work with infinite lists
    • {Extra dependency} Use the 'slist' library for fast and safe functions on infinite lists

📄 hs/src/HelVM/HelCT/Compilers/LanguageC/Examples/DumpAst.hs

  • ModuleHelVM.HelCT.Compilers.LanguageC.Examples.DumpAst
    Lines of Code36
    1. EmptyDataDecls
    2. ExistentialQuantification
    3. FlexibleContexts
    4. FlexibleInstances
    5. FunctionalDependencies
    6. GADTs
    7. GeneralizedNewtypeDeriving
    8. InstanceSigs
    9. KindSignatures
    10. LambdaCase
    11. MultiParamTypeClasses
    12. MultiWayIf
    13. NamedFieldPuns
    14. OverloadedStrings
    15. PartialTypeSignatures
    16. PatternGuards
    17. PolyKinds
    18. RankNTypes
    19. RecordWildCards
    20. ScopedTypeVariables
    21. StandaloneDeriving
    22. TupleSections
    23. TypeFamilies
    24. TypeSynonymInstances
    25. ViewPatterns
    26. TypeOperators
    27. DerivingStrategies
    28. ConstraintKinds
    29. StrictData
    1. Observations

      IDOBS-STAN-0020-xHTIxv-21:35
      SeverityWarning
      DescriptionUsage of partial function 'fromList' for
      Inspection IDSTAN-0020
      Category
      • Partial
      Filehs/src/HelVM/HelCT/Compilers/LanguageC/Examples/DumpAst.hs
        20 ┃ 
        21 ┃   let (opts,input_file) = (init $ fromList args, last $ fromList args)
        22 ┃                                   ^^^^^^^^
      
      IDOBS-STAN-0020-xHTIxv-21:57
      SeverityWarning
      DescriptionUsage of partial function 'fromList' for
      Inspection IDSTAN-0020
      Category
      • Partial
      Filehs/src/HelVM/HelCT/Compilers/LanguageC/Examples/DumpAst.hs
        20 ┃ 
        21 ┃   let (opts,input_file) = (init $ fromList args, last $ fromList args)
        22 ┃                                                         ^^^^^^^^
      

    📄 hs/src/HelVM/HelCT/Compilers/LanguageC/Examples/ParseAndPrint.hs

    • ModuleHelVM.HelCT.Compilers.LanguageC.Examples.ParseAndPrint
      Lines of Code31
      1. EmptyDataDecls
      2. ExistentialQuantification
      3. FlexibleContexts
      4. FlexibleInstances
      5. FunctionalDependencies
      6. GADTs
      7. GeneralizedNewtypeDeriving
      8. InstanceSigs
      9. KindSignatures
      10. LambdaCase
      11. MultiParamTypeClasses
      12. MultiWayIf
      13. NamedFieldPuns
      14. OverloadedStrings
      15. PartialTypeSignatures
      16. PatternGuards
      17. PolyKinds
      18. RankNTypes
      19. RecordWildCards
      20. ScopedTypeVariables
      21. StandaloneDeriving
      22. TupleSections
      23. TypeFamilies
      24. TypeSynonymInstances
      25. ViewPatterns
      26. TypeOperators
      27. DerivingStrategies
      28. ConstraintKinds
      29. StrictData
      1. Observations

        IDOBS-STAN-0020-csy3aN-20:37
        SeverityWarning
        DescriptionUsage of partial function 'fromList' for
        Inspection IDSTAN-0020
        Category
        • Partial
        Filehs/src/HelVM/HelCT/Compilers/LanguageC/Examples/ParseAndPrint.hs
          19 ┃ 
          20 ┃     let (opts,input_file) = (init $ fromList args, last $ fromList args)
          21 ┃                                     ^^^^^^^^
        
        IDOBS-STAN-0020-csy3aN-20:59
        SeverityWarning
        DescriptionUsage of partial function 'fromList' for
        Inspection IDSTAN-0020
        Category
        • Partial
        Filehs/src/HelVM/HelCT/Compilers/LanguageC/Examples/ParseAndPrint.hs
          19 ┃ 
          20 ┃     let (opts,input_file) = (init $ fromList args, last $ fromList args)
          21 ┃                                                           ^^^^^^^^
        

      📄 hs/src/HelVM/HelCT/Compilers/LanguageC/Examples/ScanFile.hs

      • ModuleHelVM.HelCT.Compilers.LanguageC.Examples.ScanFile
        Lines of Code73
        1. EmptyDataDecls
        2. ExistentialQuantification
        3. FlexibleContexts
        4. FlexibleInstances
        5. FunctionalDependencies
        6. GADTs
        7. GeneralizedNewtypeDeriving
        8. InstanceSigs
        9. KindSignatures
        10. LambdaCase
        11. MultiParamTypeClasses
        12. MultiWayIf
        13. NamedFieldPuns
        14. OverloadedStrings
        15. PartialTypeSignatures
        16. PatternGuards
        17. PolyKinds
        18. RankNTypes
        19. RecordWildCards
        20. ScopedTypeVariables
        21. StandaloneDeriving
        22. TupleSections
        23. TypeFamilies
        24. TypeSynonymInstances
        25. ViewPatterns
        26. TypeOperators
        27. DerivingStrategies
        28. ConstraintKinds
        29. StrictData
        1. Observations

          IDOBS-STAN-0020-5lqv/g-32:67
          SeverityWarning
          DescriptionUsage of partial function 'fromList' for
          Inspection IDSTAN-0020
          Category
          • Partial
          Filehs/src/HelVM/HelCT/Compilers/LanguageC/Examples/ScanFile.hs
            31 ┃ 
            32 ┃     let (pat,opts,input_file) = processArgs (hasExtension (last $ fromList args)) args
            33 ┃                                                                   ^^^^^^^^
          
          IDOBS-STAN-0020-5lqv/g-55:43
          SeverityWarning
          DescriptionUsage of partial function 'fromList' for
          Inspection IDSTAN-0020
          Category
          • Partial
          Filehs/src/HelVM/HelCT/Compilers/LanguageC/Examples/ScanFile.hs
            54 ┃ 
            55 ┃ processArgs True  args = (Nothing, init $ fromList args, last $ fromList args)
            56 ┃                                           ^^^^^^^^
          
          IDOBS-STAN-0020-5lqv/g-55:65
          SeverityWarning
          DescriptionUsage of partial function 'fromList' for
          Inspection IDSTAN-0020
          Category
          • Partial
          Filehs/src/HelVM/HelCT/Compilers/LanguageC/Examples/ScanFile.hs
            54 ┃ 
            55 ┃ processArgs True  args = (Nothing, init $ fromList args, last $ fromList args)
            56 ┃                                                                 ^^^^^^^^
          
          IDOBS-STAN-0020-5lqv/g-56:54
          SeverityWarning
          DescriptionUsage of partial function 'fromList' for
          Inspection IDSTAN-0020
          Category
          • Partial
          Filehs/src/HelVM/HelCT/Compilers/LanguageC/Examples/ScanFile.hs
            55 ┃ 
            56 ┃ processArgs False args = let (pat', args') = (last $ fromList args, init $ fromList args) in (Just pat', init $ fromList args', last $ fromList args')
            57 ┃                                                      ^^^^^^^^
          
          IDOBS-STAN-0020-5lqv/g-56:76
          SeverityWarning
          DescriptionUsage of partial function 'fromList' for
          Inspection IDSTAN-0020
          Category
          • Partial
          Filehs/src/HelVM/HelCT/Compilers/LanguageC/Examples/ScanFile.hs
            55 ┃ 
            56 ┃ processArgs False args = let (pat', args') = (last $ fromList args, init $ fromList args) in (Just pat', init $ fromList args', last $ fromList args')
            57 ┃                                                                            ^^^^^^^^
          
          IDOBS-STAN-0020-5lqv/g-56:113
          SeverityWarning
          DescriptionUsage of partial function 'fromList' for
          Inspection IDSTAN-0020
          Category
          • Partial
          Filehs/src/HelVM/HelCT/Compilers/LanguageC/Examples/ScanFile.hs
            55 ┃ 
            56 ┃ processArgs False args = let (pat', args') = (last $ fromList args, init $ fromList args) in (Just pat', init $ fromList args', last $ fromList args')
            57 ┃                                                                                                                 ^^^^^^^^
          
          IDOBS-STAN-0020-5lqv/g-56:136
          SeverityWarning
          DescriptionUsage of partial function 'fromList' for
          Inspection IDSTAN-0020
          Category
          • Partial
          Filehs/src/HelVM/HelCT/Compilers/LanguageC/Examples/ScanFile.hs
            55 ┃ 
            56 ┃ processArgs False args = let (pat', args') = (last $ fromList args, init $ fromList args) in (Just pat', init $ fromList args', last $ fromList args')
            57 ┃                                                                                                                                        ^^^^^^^^
          

        📄 hs/src/HelVM/HelCT/Compilers/LanguageC/Examples/SearchDef.hs

        • ModuleHelVM.HelCT.Compilers.LanguageC.Examples.SearchDef
          Lines of Code54
          1. EmptyDataDecls
          2. ExistentialQuantification
          3. FlexibleContexts
          4. FlexibleInstances
          5. FunctionalDependencies
          6. GADTs
          7. GeneralizedNewtypeDeriving
          8. InstanceSigs
          9. KindSignatures
          10. LambdaCase
          11. MultiParamTypeClasses
          12. MultiWayIf
          13. NamedFieldPuns
          14. OverloadedStrings
          15. PartialTypeSignatures
          16. PatternGuards
          17. PolyKinds
          18. RankNTypes
          19. RecordWildCards
          20. ScopedTypeVariables
          21. StandaloneDeriving
          22. TupleSections
          23. TypeFamilies
          24. TypeSynonymInstances
          25. ViewPatterns
          26. TypeOperators
          27. DerivingStrategies
          28. ConstraintKinds
          29. StrictData
          1. Observations

            IDOBS-STAN-0103-Zxd8R4-14:11
            SeverityPotentialBug
            DescriptionUsage of the 'length' function that hangs on infinite lists
            Inspection IDSTAN-0103
            Category
            • Infinite
            • List
            Filehs/src/HelVM/HelCT/Compilers/LanguageC/Examples/SearchDef.hs
              13 ┃ 
              14 ┃     when (length args < 2) usage
              15 ┃           ^^^^^^
            

            Possible solutions

            • Don't use 'length' if you expect your function to work with infinite lists
            • {Extra dependency} Use the 'slist' library for fast and safe functions on infinite lists
            IDOBS-STAN-0020-Zxd8R4-20:34
            SeverityWarning
            DescriptionUsage of partial function 'fromList' for
            Inspection IDSTAN-0020
            Category
            • Partial
            Filehs/src/HelVM/HelCT/Compilers/LanguageC/Examples/SearchDef.hs
              19 ┃ 
              20 ┃     let (opts,c_file) = ((init . fromList) &&& (last . fromList)) args'
              21 ┃                                  ^^^^^^^^
            
            IDOBS-STAN-0020-Zxd8R4-20:56
            SeverityWarning
            DescriptionUsage of partial function 'fromList' for
            Inspection IDSTAN-0020
            Category
            • Partial
            Filehs/src/HelVM/HelCT/Compilers/LanguageC/Examples/SearchDef.hs
              19 ┃ 
              20 ┃     let (opts,c_file) = ((init . fromList) &&& (last . fromList)) args'
              21 ┃                                                        ^^^^^^^^
            
            IDOBS-STAN-0020-Zxd8R4-38:65
            SeverityWarning
            DescriptionUsage of partial function 'fromList' for
            Inspection IDSTAN-0020
            Category
            • Partial
            Filehs/src/HelVM/HelCT/Compilers/LanguageC/Examples/SearchDef.hs
              37 ┃ 
              38 ┃       mapM_ (printIfMatch def_id) (zip decls' (map Just (tail $ fromList decls') <> [Nothing]))
              39 ┃                                                                 ^^^^^^^^
            
            IDOBS-STAN-0213-Zxd8R4-54:9
            SeverityWarning
            DescriptionPattern matching on '_' for sum types can create maintainability issues
            Inspection IDSTAN-0213
            Category
            • AntiPattern
            Filehs/src/HelVM/HelCT/Compilers/LanguageC/Examples/SearchDef.hs
              53 ┃ 
              54 ┃         _                                                 -> error "bad search term"
              55 ┃         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            

            Possible solutions

            • Pattern match on each constructor explicitly
            • Add meaningful names to holes, e.g. '_anyOtherFailure'

          Configurations

          This section describes the final Stan configuration that was used on the project and explains how this result was assembled. Stan runtime settings have many parts, and each of them can come from different configuration sources. Stan is using Environment variables, TOML configuration file and CLI arguments to get the final results. If some option is specified through the multiple sources, the most prioritized one is used.

          ActionFilterScope

          Configuration Process Information

          Information and warnings that were gathered during the configuration assemble process. This helps to understand how different parts of the configurations were retrieved.

          • No TOML value is specified for key: check
          • No CLI option specified for: checks
          • configChecks is set through the source: TOML
          • No TOML value is specified for key: remove
          • No CLI option specified for: remove
          • configRemoved is set through the source: TOML
          • No TOML value is specified for key: ignore
          • No CLI option specified for: ignore
          • configIgnored is set through the source: TOML

          Report Explained

          Inspections

          List of Inspections used for analysing the project

          Inspection STAN-0001

          Partial: ghc-internal/head

          Usage of partial function 'head' for lists

          Warning
          • Partial
          • List

          Possible solutions

          • Replace list with 'NonEmpty' from 'Data.List.NonEmpty'
          • Use explicit pattern-matching over lists

          Inspection STAN-0002

          Partial: ghc-internal/tail

          Usage of partial function 'tail' for lists

          Warning
          • Partial
          • List

          Possible solutions

          • Replace list with 'NonEmpty' from 'Data.List.NonEmpty'
          • Use explicit pattern-matching over lists

          Inspection STAN-0003

          Partial: ghc-internal/init

          Usage of partial function 'init' for lists

          Warning
          • Partial
          • List

          Possible solutions

          • Replace list with 'NonEmpty' from 'Data.List.NonEmpty'
          • Use explicit pattern-matching over lists

          Inspection STAN-0004

          Partial: ghc-internal/last

          Usage of partial function 'last' for lists

          Warning
          • Partial
          • List

          Possible solutions

          • Replace list with 'NonEmpty' from 'Data.List.NonEmpty'
          • Use explicit pattern-matching over lists

          Inspection STAN-0005

          Partial: ghc-internal/!!

          Usage of partial function '!!' for lists

          Warning
          • Partial
          • List

          Inspection STAN-0006

          Partial: ghc-internal/cycle

          Usage of partial function 'cycle' for lists

          Warning
          • Partial
          • List

          Possible solutions

          • Replace list with 'NonEmpty' from 'Data.List.NonEmpty'
          • Use explicit pattern-matching over lists

          Inspection STAN-0007

          Partial: ghc-internal/genericIndex

          Usage of partial function 'genericIndex' for lists

          Warning
          • Partial
          • List

          Inspection STAN-0008

          Partial: ghc-internal/fromJust

          Usage of partial function 'fromJust' for 'Maybe'

          Warning
          • Partial

          Possible solutions

          • Use explicit pattern-matching over Maybe
          • Use one of the standard functions: 'maybe', 'fromMaybe'

          Inspection STAN-0009

          Partial: ghc-internal/read

          Usage of partial function 'read' for parsing 'String'

          Warning
          • Partial

          Possible solutions

          • Use 'readMaybe' or 'readEither' to handle failed parsing

          Inspection STAN-0010

          Partial: ghc-internal/succ

          Usage of partial function 'succ' for enumerable types

          Warning
          • Partial

          Possible solutions

          • Use '(+ 1)' for integral types (but be aware of arithmetic overflow)
          • {Extra dependency} Use 'next' from 'Relude.Extra.Enum' in 'relude'

          Inspection STAN-0011

          Partial: ghc-internal/pred

          Usage of partial function 'pred' for enumerable types

          Warning
          • Partial

          Possible solutions

          • Use '(- 1)' for integral types (but be aware of arithmetic overflow)
          • {Extra dependency} Use 'prev' from 'Relude.Extra.Enum' in 'relude'

          Inspection STAN-0012

          Partial: ghc-internal/toEnum

          Usage of partial function 'toEnum' for enumerable types

          Warning
          • Partial

          Possible solutions

          • {Extra dependency} Use 'safeToEnum' from 'Relude.Extra.Enum' in 'relude'

          Inspection STAN-0013

          Partial: ghc-internal/maximum

          Usage of partial function 'maximum' for

          Warning
          • Partial

          Inspection STAN-0014

          Partial: ghc-internal/minimum

          Usage of partial function 'minimum' for

          Warning
          • Partial

          Inspection STAN-0015

          Partial: ghc-internal/maximumBy

          Usage of partial function 'maximumBy' for

          Warning
          • Partial

          Inspection STAN-0016

          Partial: ghc-internal/minimumBy

          Usage of partial function 'minimumBy' for

          Warning
          • Partial

          Inspection STAN-0017

          Partial: ghc-internal/foldl1

          Usage of partial function 'foldl1' for

          Warning
          • Partial

          Inspection STAN-0018

          Partial: ghc-internal/foldl1'

          Usage of partial function 'foldl1'' for lists

          Warning
          • Partial
          • List

          Possible solutions

          • Replace list with 'NonEmpty' from 'Data.List.NonEmpty'
          • Use explicit pattern-matching over lists

          Inspection STAN-0019

          Partial: ghc-internal/foldr1

          Usage of partial function 'foldr1' for

          Warning
          • Partial

          Inspection STAN-0020

          Partial: ghc-internal/fromList

          Usage of partial function 'fromList' for

          Warning
          • Partial

          Inspection STAN-0021

          Partial: ghc-internal/fromInteger

          Usage of partial function 'fromInteger' for

          Warning
          • Partial

          Inspection STAN-0022

          Partial: ghc-internal/fromRational

          Usage of partial function 'fromRational' for Scientific

          Warning
          • Partial

          Possible solutions

          • Use a function like 'Data.Scientific.fromRationalRepetend' that handles repeating decimals
          • Convert to a fractional type like 'Double'

          Inspection STAN-0023

          Partial: ghc-internal/realToFrac

          Usage of partial function 'realToFrac' for Scientific

          Warning
          • Partial

          Possible solutions

          • Use 'Data.Scientific.fromFloatDigits'
          • use a function that handles repeating decimals, e.g. 'Data.Scientific.fromRationalRepetend . toRational'

          Inspection STAN-0024

          Partial: ghc-internal/recip

          Usage of partial function 'recip' for Scientific

          Warning
          • Partial

          Possible solutions

          • Convert to a fractional type like 'Double'

          Inspection STAN-0025

          Partial: ghc-internal//

          Usage of partial function '/' for Scientific

          Warning
          • Partial

          Possible solutions

          • Convert to a fractional type like 'Double'

          Inspection STAN-0101

          Infinite: ghc-internal/reverse

          Usage of the 'reverse' function that hangs on infinite lists

          PotentialBug
          • Infinite
          • List

          Possible solutions

          • Don't use 'reverse' if you expect your function to work with infinite lists
          • {Extra dependency} Use the 'slist' library for fast and safe functions on infinite lists

          Inspection STAN-0102

          Infinite: ghc-internal/isSuffixOf

          Usage of the 'isSuffixOf' function that hangs on infinite lists

          PotentialBug
          • Infinite
          • List

          Possible solutions

          • Don't use 'isSuffixOf' if you expect your function to work with infinite lists
          • {Extra dependency} Use the 'slist' library for fast and safe functions on infinite lists

          Inspection STAN-0103

          Infinite: ghc-internal/length

          Usage of the 'length' function that hangs on infinite lists

          PotentialBug
          • Infinite
          • List

          Possible solutions

          • Don't use 'length' if you expect your function to work with infinite lists
          • {Extra dependency} Use the 'slist' library for fast and safe functions on infinite lists

          Inspection STAN-0104

          Infinite: ghc-internal/genericLength

          Usage of the 'genericLength' function that hangs on infinite lists

          PotentialBug
          • Infinite
          • List

          Possible solutions

          • Don't use 'genericLength' if you expect your function to work with infinite lists
          • {Extra dependency} Use the 'slist' library for fast and safe functions on infinite lists

          Inspection STAN-0105

          Infinite: ghc-internal/sum

          Usage of the 'sum' function that hangs on infinite lists

          PotentialBug
          • Infinite
          • List

          Possible solutions

          • Don't use 'sum' if you expect your function to work with infinite lists
          • {Extra dependency} Use the 'slist' library for fast and safe functions on infinite lists

          Inspection STAN-0106

          Infinite: ghc-internal/product

          Usage of the 'product' function that hangs on infinite lists

          PotentialBug
          • Infinite
          • List

          Possible solutions

          • Don't use 'product' if you expect your function to work with infinite lists
          • {Extra dependency} Use the 'slist' library for fast and safe functions on infinite lists

          Inspection STAN-0201

          Anti-pattern: [0 .. length xs]

          Creating a list with wrong number of indices

          PotentialBug
          • AntiPattern

          Possible solutions

          • Replace '[0 .. length xs]' with '[0 .. length xs - 1]'
          • Use 'zip [0 ..] xs` to work with list of pairs: index and element

          Inspection STAN-0202

          Anti-pattern: foldl

          Usage of space-leaking function 'foldl'

          Error
          • SpaceLeak
          • AntiPattern

          Possible solutions

          • Replace 'foldl' with 'foldl''
          • Use 'foldr (flip . f)` instead of 'foldl f'

          Inspection STAN-0203

          Anti-pattern: Data.ByteString.Char8.pack

          Usage of 'pack' function that doesn't handle Unicode characters

          Error
          • AntiPattern

          Possible solutions

          • Convert to 'Text' and use 'encodeUtf8' from 'Data.Text.Encoding'
          • {Extra dependency} Use 'encodeUtf8' from 'relude'
          • {Extra dependency} Use the 'utf8-string' package

          Inspection STAN-0204

          Anti-pattern: HashMap size

          Usage of 'size' or 'length' for 'HashMap' that runs in linear time

          Performance
          • AntiPattern

          Possible solutions

          • {Extra dependency} Switch to 'Map' from 'containers'

          Inspection STAN-0205

          Anti-pattern: HashSet size

          Usage of 'size' or 'length' for 'HashSet' that runs in linear time

          Performance
          • AntiPattern

          Possible solutions

          • {Extra dependency} Switch to 'Set' from 'containers'

          Inspection STAN-0206

          Data types with non-strict fields

          Defining lazy fields in data types can lead to unexpected space leaks

          Performance
          • SpaceLeak
          • Syntax

          Possible solutions

          • Add '!' before the type, e.g. !Int or !(Maybe Bool)
          • Enable the 'StrictData' extension: {-# LANGUAGE StrictData #-}

          Inspection STAN-0207

          Anti-pattern: Foldable methods on possibly error-prone structures

          Usage of Foldable methods on (,), Maybe, Either

          PotentialBug
          • AntiPattern

          Possible solutions

          • Use more explicit functions with specific monomorphic types

          Inspection STAN-0208

          Anti-pattern: Slow 'length' for Text

          Usage of 'length' for 'Text' that runs in linear time

          Performance
          • AntiPattern

          Possible solutions

          • {Extra dependency} Switch to 'ByteString' from 'bytestring'

          Inspection STAN-0209

          Anti-pattern: Slow 'nub' for lists

          Usage of 'nub' on lists that runs in quadratic time

          Performance
          • AntiPattern

          Possible solutions

          • {Extra dependency} Switch list to 'Set' from 'containers'
          • {Extra dependency} Use 'ordNub/hashNub/sortNub/unstableNub' from 'relude'
          • {Extra dependency} Use 'nubOrd' from 'containers'
          • {Extra dependency} Use 'nubOrd' from 'extra'

          Inspection STAN-0210

          Anti-pattern: Slow 'for_' on ranges

          Usage of 'for_' or 'forM_' on numerical ranges is slow

          Performance
          • AntiPattern

          Possible solutions

          • {Extra dependency} Use 'loop' library for fast monadic looping

          Inspection STAN-0211

          Anti-pattern: '</>' for URLs

          Usage of '</>' for URLs results in the errors on Windows

          Error
          • AntiPattern

          Possible solutions

          • {Extra dependency} Use type-safe library for URLs
          • Concatenate URLs with slashes '/'

          Inspection STAN-0212

          Anti-pattern: unsafe functions

          Usage of unsafe functions breaks referential transparency

          Error
          • Unsafe
          • AntiPattern

          Possible solutions

          • Remove 'undefined' or at least replace with 'error' to give better error messages
          • Replace 'unsafeCoerce' with 'coerce'
          • Rewrite the code to avoid using 'unsafePerformIO' and other unsafe IO functions

          Inspection STAN-0213

          Anti-pattern: Pattern matching on '_'

          Pattern matching on '_' for sum types can create maintainability issues

          Warning
          • AntiPattern

          Possible solutions

          • Pattern match on each constructor explicitly
          • Add meaningful names to holes, e.g. '_anyOtherFailure'

          Inspection STAN-0214

          Anti-pattern: use 'compare'

          Usage of multiple comparison operators instead of single 'compare'

          Performance
          • AntiPattern

          Possible solutions

          • Rewrite code to use single 'compare' instead of many comparison operators

          Inspection STAN-0215

          Anti-pattern: Slashes in paths

          Usage of '/' or '\' in paths results in the errors on different operation systems

          Error
          • AntiPattern

          Possible solutions

          • {Extra dependency} Use '</>' operator from 'filepath'

          Inspection STAN-0301

          Missing fixity declaration for operator

          Using the implicit default fixity for operator: infixl 9

          Style
          • Syntax

          Possible solutions

          • Add 'infix[l|r]' declaration to the operator with explicit precedence

          Inspection STAN-0302

          Big tuples

          Using tuples of big size (>= 4) can decrease code readability

          Style
          • AntiPattern
          • Syntax

          Possible solutions

          • Consider defining and using a custom data type to improve code comprehension

          Severity

          We are using the following severity system to indicate the observation level

          SeverityDescription
          StyleCode style issues. Usually harmless.
          PerformanceSerious defects that could cause slowness and space leaking.
          PotentialBugHuman errors in code.
          WarningPotential runtime errors on some inputs.
          ErrorDangerous behaviour.