Analysed by SourceGraph (version 0.7.0.0) using Graphalyze (version 0.11.0.0)
Wednesday 24 November, 2010







Please note that the source-code analysis in this document is not necessarily perfect: SourceGraph is not a refactoring tool, and it's usage of Classes is still premature.
Implicitly exported entities refer to class methods that are instantiated but defined elsewhere, or entities whose names start with an underscore . Note that even for Main modules, these implicit exports are included.
All graph visualisations link to larger SVG versions of the same graph.
Here is the current module grouping of functions:
Here is a proposed alternate module grouping:
Using the Chinese Whispers algorithm:
The core of software is calculated by recursively removing roots and leaves of the call graph; as such, it can be considered as the section where all the "real work" is done.
Visualises how far away from the exported root entities an entity is.
The overall cyclomatic complexity is: 655
For more information on cyclomatic complexity, please see: Wikipedia: Cyclomatic Complexity
These functions are those that are inaccessible:
Analyse.GraphRepr.updateCollapsed, Parsing.Types.callType, Parsing.Types.clusterEntityM, Parsing.Types.clusterEntityM', Parsing.Types.defEntity, Parsing.Types.fromEntity, Parsing.Types.modPathClust, Parsing.Types.moduleRelationships, Parsing.Types.modulesIn, Parsing.Types.setEntModule, Parsing.Types.setEntModules, Parsing.Types.setUnion, Parsing.Types.toEntity
The functions are split up into 2 components. You may wish to consider splitting the code up into multiple libraries.
The code has the following cross-module chains:
Analyse.Imports.graphOf -> Analyse.Visualise.drawModules
These chains can all be compressed down to a single function.
The cyclomatic complexity of the imports is: 21
For more information on cyclomatic complexity, please see: Wikipedia: Cyclomatic Complexity
Visualises how far away from the exported root entities an entity is.
The cyclomatic complexity of Analyse is: 8.
For more information on cyclomatic complexity, please see: Wikipedia: Cyclomatic Complexity
The module Analyse has 2 components. You may wish to consider splitting it up.
Visualises how far away from the exported root entities an entity is.
The cyclomatic complexity of Analyse.Colors is: 12.
For more information on cyclomatic complexity, please see: Wikipedia: Cyclomatic Complexity
The module Analyse.Colors has 12 components. You may wish to consider splitting it up.
Visualises how far away from the exported root entities an entity is.
The cyclomatic complexity of Analyse.Everything is: 3.
For more information on cyclomatic complexity, please see: Wikipedia: Cyclomatic Complexity
Visualises how far away from the exported root entities an entity is.
The cyclomatic complexity of Analyse.GraphRepr is: 30.
For more information on cyclomatic complexity, please see: Wikipedia: Cyclomatic Complexity
The module Analyse.GraphRepr has 2 components. You may wish to consider splitting it up.
The module Analyse.GraphRepr has the following chains:
collapseStructures -> collapseFuncs -> mkCollapseTp
These chains can all be compressed down to a single function.
Visualises how far away from the exported root entities an entity is.
The cyclomatic complexity of Analyse.Imports is: 1.
For more information on cyclomatic complexity, please see: Wikipedia: Cyclomatic Complexity
The module Analyse.Imports has the following chains:
importsToGraph -> moduleImports
These chains can all be compressed down to a single function.
Visualises how far away from the exported root entities an entity is.
The cyclomatic complexity of Analyse.Module is: 1.
For more information on cyclomatic complexity, please see: Wikipedia: Cyclomatic Complexity
The module Analyse.Module has the following chains:
analyseModules -> analyseModule
These chains can all be compressed down to a single function.
Visualises how far away from the exported root entities an entity is.
The cyclomatic complexity of Analyse.Utils is: 6.
For more information on cyclomatic complexity, please see: Wikipedia: Cyclomatic Complexity
The module Analyse.Utils has 6 components. You may wish to consider splitting it up.
Visualises how far away from the exported root entities an entity is.
The cyclomatic complexity of Analyse.Visualise is: 9.
For more information on cyclomatic complexity, please see: Wikipedia: Cyclomatic Complexity
Visualises how far away from the exported root entities an entity is.
The cyclomatic complexity of CabalInfo is: 1.
For more information on cyclomatic complexity, please see: Wikipedia: Cyclomatic Complexity
Visualises how far away from the exported root entities an entity is.
The cyclomatic complexity of Main is: 14.
For more information on cyclomatic complexity, please see: Wikipedia: Cyclomatic Complexity
The module Main has the following chains:
isTrivial -> isSetup
parseCabal' -> fpToModule
parseHaskellFiles -> readFiles -> readFileContents
These chains can all be compressed down to a single function.
Visualises how far away from the exported root entities an entity is.
The cyclomatic complexity of Parsing is: 1.
For more information on cyclomatic complexity, please see: Wikipedia: Cyclomatic Complexity
The module Parsing has the following chains:
parseHaskell -> parseFiles -> parseFile
These chains can all be compressed down to a single function.
The core of a module is calculated by recursively removing roots and leaves of the call graph; as such, it can be considered as the section where all the "real work" is done.
Visualises how far away from the exported root entities an entity is.
The cyclomatic complexity of Parsing.ParseModule is: 191.
For more information on cyclomatic complexity, please see: Wikipedia: Cyclomatic Complexity
The module Parsing.ParseModule has the following cliques:
getBindings, getDecl
getExp, getExps
getExp, getPat
getExp, getStmt
getPField, getPat
getPat, getPats
getStmt, getStmts
The module Parsing.ParseModule has the following non-clique cycles:
getAlt -> getBindings -> getDecl -> getMatch -> getPats -> getPat -> getExp -> getAlt
getAlt -> getBindings -> getDecl -> getMatch -> getRHS -> getExp -> getAlt
getAlt -> getBindings -> getDecl -> getMatch -> getRHS -> getGRhs -> getExp -> getAlt
getAlt -> getBindings -> getDecl -> getMatch -> getRHS -> getGRhs -> getStmts -> getStmt -> getExp -> getAlt
getAlt -> getBindings -> getDecl -> getMatch -> getRHS -> getGRhs -> getStmts -> getStmt -> getPat -> getExp -> getAlt
getAlt -> getBindings -> getDecl -> getPat -> getExp -> getAlt
getAlt -> getBindings -> getDecl -> getRHS -> getExp -> getAlt
getAlt -> getBindings -> getDecl -> getRHS -> getGRhs -> getExp -> getAlt
getAlt -> getBindings -> getDecl -> getRHS -> getGRhs -> getStmts -> getStmt -> getExp -> getAlt
getAlt -> getBindings -> getDecl -> getRHS -> getGRhs -> getStmts -> getStmt -> getPat -> getExp -> getAlt
getAlt -> getBindings -> getIPBinds -> getExp -> getAlt
getAlt -> getGAlts -> getExp -> getAlt
getAlt -> getGAlts -> getGAlt -> getExp -> getAlt
getAlt -> getGAlts -> getGAlt -> getStmts -> getStmt -> getBindings -> getDecl -> getMatch -> getPats -> getPat -> getExp -> getAlt
getAlt -> getGAlts -> getGAlt -> getStmts -> getStmt -> getBindings -> getDecl -> getMatch -> getRHS -> getExp -> getAlt
getAlt -> getGAlts -> getGAlt -> getStmts -> getStmt -> getBindings -> getDecl -> getMatch -> getRHS -> getGRhs -> getExp -> getAlt
getAlt -> getGAlts -> getGAlt -> getStmts -> getStmt -> getBindings -> getDecl -> getPat -> getExp -> getAlt
getAlt -> getGAlts -> getGAlt -> getStmts -> getStmt -> getBindings -> getDecl -> getRHS -> getExp -> getAlt
getAlt -> getGAlts -> getGAlt -> getStmts -> getStmt -> getBindings -> getDecl -> getRHS -> getGRhs -> getExp -> getAlt
getAlt -> getGAlts -> getGAlt -> getStmts -> getStmt -> getBindings -> getIPBinds -> getExp -> getAlt
getAlt -> getGAlts -> getGAlt -> getStmts -> getStmt -> getExp -> getAlt
getAlt -> getGAlts -> getGAlt -> getStmts -> getStmt -> getPat -> getExp -> getAlt
getAlt -> getPat -> getExp -> getAlt
getBindings -> getDecl -> getMatch -> getBindings
getBindings -> getDecl -> getMatch -> getPats -> getPat -> getExp -> getBindings
getBindings -> getDecl -> getMatch -> getPats -> getPat -> getExp -> getQStmts -> getQStmt -> getStmt -> getBindings
getBindings -> getDecl -> getMatch -> getPats -> getPat -> getExp -> getStmt -> getBindings
getBindings -> getDecl -> getMatch -> getPats -> getPat -> getExp -> getStmts -> getStmt -> getBindings
getBindings -> getDecl -> getMatch -> getRHS -> getExp -> getBindings
getBindings -> getDecl -> getMatch -> getRHS -> getExp -> getQStmts -> getQStmt -> getStmt -> getBindings
getBindings -> getDecl -> getMatch -> getRHS -> getExp -> getStmt -> getBindings
getBindings -> getDecl -> getMatch -> getRHS -> getExp -> getStmts -> getStmt -> getBindings
getBindings -> getDecl -> getMatch -> getRHS -> getGRhs -> getExp -> getBindings
getBindings -> getDecl -> getMatch -> getRHS -> getGRhs -> getExp -> getQStmts -> getQStmt -> getStmt -> getBindings
getBindings -> getDecl -> getMatch -> getRHS -> getGRhs -> getExp -> getStmt -> getBindings
getBindings -> getDecl -> getMatch -> getRHS -> getGRhs -> getExp -> getStmts -> getStmt -> getBindings
getBindings -> getDecl -> getMatch -> getRHS -> getGRhs -> getStmts -> getStmt -> getBindings
getBindings -> getDecl -> getMatch -> getRHS -> getGRhs -> getStmts -> getStmt -> getExp -> getBindings
getBindings -> getDecl -> getMatch -> getRHS -> getGRhs -> getStmts -> getStmt -> getPat -> getExp -> getBindings
getBindings -> getDecl -> getPat -> getExp -> getBindings
getBindings -> getDecl -> getPat -> getExp -> getQStmts -> getQStmt -> getStmt -> getBindings
getBindings -> getDecl -> getPat -> getExp -> getStmt -> getBindings
getBindings -> getDecl -> getPat -> getExp -> getStmts -> getStmt -> getBindings
getBindings -> getDecl -> getRHS -> getExp -> getBindings
getBindings -> getDecl -> getRHS -> getExp -> getQStmts -> getQStmt -> getStmt -> getBindings
getBindings -> getDecl -> getRHS -> getExp -> getStmt -> getBindings
getBindings -> getDecl -> getRHS -> getExp -> getStmts -> getStmt -> getBindings
getBindings -> getDecl -> getRHS -> getGRhs -> getExp -> getBindings
getBindings -> getDecl -> getRHS -> getGRhs -> getExp -> getQStmts -> getQStmt -> getStmt -> getBindings
getBindings -> getDecl -> getRHS -> getGRhs -> getExp -> getStmt -> getBindings
getBindings -> getDecl -> getRHS -> getGRhs -> getExp -> getStmts -> getStmt -> getBindings
getBindings -> getDecl -> getRHS -> getGRhs -> getStmts -> getStmt -> getBindings
getBindings -> getDecl -> getRHS -> getGRhs -> getStmts -> getStmt -> getExp -> getBindings
getBindings -> getDecl -> getRHS -> getGRhs -> getStmts -> getStmt -> getPat -> getExp -> getBindings
getBindings -> getIPBinds -> getExp -> getBindings
getBindings -> getIPBinds -> getExp -> getQStmts -> getQStmt -> getStmt -> getBindings
getBindings -> getIPBinds -> getExp -> getStmt -> getBindings
getBindings -> getIPBinds -> getExp -> getStmts -> getStmt -> getBindings
getExp -> getFUpdates -> getFUpdate -> getExp
getExp -> getPats -> getPat -> getExp
getExp -> getQStmts -> getQStmt -> getExp
getExp -> getQStmts -> getQStmt -> getStmt -> getExp
getExp -> getQStmts -> getQStmt -> getStmt -> getPat -> getExp
getExp -> getStmt -> getPat -> getExp
getExp -> getStmts -> getStmt -> getExp
getExp -> getStmts -> getStmt -> getPat -> getExp
The module Parsing.ParseModule has the following chains:
addClassDecl -> addCDecl
addInstDecl -> addIDecl
getFUpdates -> getFUpdate
Class: ModuleItem, Data: (Maybe [ExportSpec]) -> listedExp
These chains can all be compressed down to a single function.
Visualises how far away from the exported root entities an entity is.
The cyclomatic complexity of Parsing.State is: 6.
For more information on cyclomatic complexity, please see: Wikipedia: Cyclomatic Complexity
The module Parsing.State has 2 components. You may wish to consider splitting it up.
Visualises how far away from the exported root entities an entity is.
The cyclomatic complexity of Parsing.Types is: 74.
For more information on cyclomatic complexity, please see: Wikipedia: Cyclomatic Complexity
The module Parsing.Types has 4 components. You may wish to consider splitting it up.