Skip to content

Commit

Permalink
refactor API
Browse files Browse the repository at this point in the history
  • Loading branch information
phischu committed Nov 25, 2014
1 parent d79f745 commit 02c311a
Show file tree
Hide file tree
Showing 255 changed files with 2,150 additions and 4,154 deletions.
77 changes: 77 additions & 0 deletions examples/HeadUsages.hs
@@ -0,0 +1,77 @@
module Main where

import Language.Haskell.Exts.Annotated
import qualified Language.Haskell.Exts as UnAnn (Name(Ident))
import Language.Haskell.Names
import Language.Haskell.Names.Interfaces
import Distribution.HaskellSuite
import Distribution.Simple.Compiler

import Data.Maybe
import Data.List
import Data.Proxy
import qualified Data.Foldable as Foldable
import Text.Printf
import Control.Applicative
import Control.Monad

main :: IO ()
main = do

-- read the program's source from stdin
source <- getContents

let
-- parse the program (using haskell-src-exts)
ast = fromParseResult $
parseModuleWithMode defaultParseMode {parseFilename="stdin"} source

-- get all installed packages (user and global)
pkgs <-
(++) <$>
getInstalledPackages (Proxy :: Proxy NamesDB) UserPackageDB <*>
getInstalledPackages (Proxy :: Proxy NamesDB) GlobalPackageDB

headUsages <- evalNamesModuleT (findHeads ast) pkgs

forM_ headUsages $ \loc ->
printf "Prelude.head is used at %s\n" (prettyPrint $ srcInfoSpan loc)

when (null headUsages) $
printf "Congratulations! Your code doesn't use Prelude.head\n"

-- this is a computation in a ModuleT monad, because we need access to
-- modules' interfaces
findHeads :: Module SrcSpanInfo -> ModuleT [Symbol] IO [SrcSpanInfo]
findHeads ast = do
-- first of all, figure out the canonical name of "Prelude.head"
-- (hint: it's "GHC.List.head")
symbols <- fromMaybe (error "Prelude not found") <$> getModuleInfo "Prelude"
let
-- we walk through all values defined in Prelude and look for
-- one with name "head"
headSymbol =
fromMaybe (error "Prelude.head not found") (listToMaybe (do
symbol <- symbols
guard (symbolName symbol == UnAnn.Ident "head")
return symbol))

-- annotate our ast with name binding information
annotatedAst <-
annotateModule
Haskell2010 -- base language
[] -- set of extensions
ast


let
-- get list of all annotations
annotations = Foldable.toList annotatedAst

-- look for headSymbol
headUsages = nub (do
Scoped (GlobalSymbol globalSymbol _) location <- annotations
guard (globalSymbol == headSymbol)
return location)

return headUsages
2 changes: 1 addition & 1 deletion hs-gen-iface/src/hs-gen-iface.hs
Expand Up @@ -101,4 +101,4 @@ compile buildDir mbLang exts cppOpts pkgName pkgdbs deps files = do

createDirectoryIfMissingVerbose silent True (dropFileName ifaceFile)

writeInterface ifaceFile $ qualifySymbols pkgName syms
writeInterface ifaceFile syms
2 changes: 1 addition & 1 deletion libraries/array-0.4.0.2/Data/Array.names
@@ -1 +1 @@
[{"origin":{"name":"!","module":"GHC.Arr","package":"base-4.7.0.0"},"fixity":null,"entity":"value"},{"origin":{"name":"//","module":"GHC.Arr","package":"base-4.7.0.0"},"fixity":null,"entity":"value"},{"origin":{"name":"accum","module":"GHC.Arr","package":"base-4.7.0.0"},"fixity":null,"entity":"value"},{"origin":{"name":"accumArray","module":"GHC.Arr","package":"base-4.7.0.0"},"fixity":null,"entity":"value"},{"origin":{"name":"array","module":"GHC.Arr","package":"base-4.7.0.0"},"fixity":null,"entity":"value"},{"origin":{"name":"assocs","module":"GHC.Arr","package":"base-4.7.0.0"},"fixity":null,"entity":"value"},{"origin":{"name":"bounds","module":"GHC.Arr","package":"base-4.7.0.0"},"fixity":null,"entity":"value"},{"origin":{"name":"elems","module":"GHC.Arr","package":"base-4.7.0.0"},"fixity":null,"entity":"value"},{"origin":{"name":"indices","module":"GHC.Arr","package":"base-4.7.0.0"},"fixity":null,"entity":"value"},{"origin":{"name":"ixmap","module":"GHC.Arr","package":"base-4.7.0.0"},"fixity":null,"entity":"value"},{"origin":{"name":"listArray","module":"GHC.Arr","package":"base-4.7.0.0"},"fixity":null,"entity":"value"},{"origin":{"name":"inRange","module":"GHC.Arr","package":"base-4.7.0.0"},"fixity":null,"entity":"method","class":{"name":"Ix","module":"GHC.Arr","package":"base-4.7.0.0"}},{"origin":{"name":"index","module":"GHC.Arr","package":"base-4.7.0.0"},"fixity":null,"entity":"method","class":{"name":"Ix","module":"GHC.Arr","package":"base-4.7.0.0"}},{"origin":{"name":"range","module":"GHC.Arr","package":"base-4.7.0.0"},"fixity":null,"entity":"method","class":{"name":"Ix","module":"GHC.Arr","package":"base-4.7.0.0"}},{"origin":{"name":"rangeSize","module":"GHC.Arr","package":"base-4.7.0.0"},"fixity":null,"entity":"method","class":{"name":"Ix","module":"GHC.Arr","package":"base-4.7.0.0"}},{"origin":{"name":"Array","module":"GHC.Arr","package":"base-4.7.0.0"},"fixity":null,"entity":"data"},{"origin":{"name":"Ix","module":"GHC.Arr","package":"base-4.7.0.0"},"fixity":null,"entity":"class"}]
[{"name":"inRange","class":"Ix","entity":"method","module":"GHC.Arr"},{"name":"index","class":"Ix","entity":"method","module":"GHC.Arr"},{"name":"range","class":"Ix","entity":"method","module":"GHC.Arr"},{"name":"rangeSize","class":"Ix","entity":"method","module":"GHC.Arr"},{"name":"Ix","entity":"class","module":"GHC.Arr"},{"name":"Array","entity":"data","module":"GHC.Arr"},{"name":"array","entity":"value","module":"GHC.Arr"},{"name":"listArray","entity":"value","module":"GHC.Arr"},{"name":"accumArray","entity":"value","module":"GHC.Arr"},{"name":"!","entity":"value","module":"GHC.Arr"},{"name":"bounds","entity":"value","module":"GHC.Arr"},{"name":"indices","entity":"value","module":"GHC.Arr"},{"name":"elems","entity":"value","module":"GHC.Arr"},{"name":"assocs","entity":"value","module":"GHC.Arr"},{"name":"//","entity":"value","module":"GHC.Arr"},{"name":"accum","entity":"value","module":"GHC.Arr"},{"name":"ixmap","entity":"value","module":"GHC.Arr"}]
2 changes: 1 addition & 1 deletion libraries/array-0.4.0.2/Data/Array/Base.names

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion libraries/array-0.4.0.2/Data/Array/IArray.names
@@ -1 +1 @@
[{"origin":{"name":"!","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"value"},{"origin":{"name":"//","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"value"},{"origin":{"name":"accum","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"value"},{"origin":{"name":"accumArray","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"value"},{"origin":{"name":"amap","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"value"},{"origin":{"name":"array","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"value"},{"origin":{"name":"assocs","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"value"},{"origin":{"name":"elems","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"value"},{"origin":{"name":"indices","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"value"},{"origin":{"name":"ixmap","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"value"},{"origin":{"name":"listArray","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"value"},{"origin":{"name":"bounds","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"method","class":{"name":"IArray","module":"Data.Array.Base","package":"array-0.4.0.2"}},{"origin":{"name":"inRange","module":"GHC.Arr","package":"base-4.7.0.0"},"fixity":null,"entity":"method","class":{"name":"Ix","module":"GHC.Arr","package":"base-4.7.0.0"}},{"origin":{"name":"index","module":"GHC.Arr","package":"base-4.7.0.0"},"fixity":null,"entity":"method","class":{"name":"Ix","module":"GHC.Arr","package":"base-4.7.0.0"}},{"origin":{"name":"range","module":"GHC.Arr","package":"base-4.7.0.0"},"fixity":null,"entity":"method","class":{"name":"Ix","module":"GHC.Arr","package":"base-4.7.0.0"}},{"origin":{"name":"rangeSize","module":"GHC.Arr","package":"base-4.7.0.0"},"fixity":null,"entity":"method","class":{"name":"Ix","module":"GHC.Arr","package":"base-4.7.0.0"}},{"origin":{"name":"Array","module":"GHC.Arr","package":"base-4.7.0.0"},"fixity":null,"entity":"data"},{"origin":{"name":"IArray","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"class"},{"origin":{"name":"Ix","module":"GHC.Arr","package":"base-4.7.0.0"},"fixity":null,"entity":"class"}]
[{"name":"IArray","entity":"class","module":"Data.Array.Base"},{"name":"inRange","class":"Ix","entity":"method","module":"GHC.Arr"},{"name":"index","class":"Ix","entity":"method","module":"GHC.Arr"},{"name":"range","class":"Ix","entity":"method","module":"GHC.Arr"},{"name":"rangeSize","class":"Ix","entity":"method","module":"GHC.Arr"},{"name":"Ix","entity":"class","module":"GHC.Arr"},{"name":"Array","entity":"data","module":"GHC.Arr"},{"name":"array","entity":"value","module":"Data.Array.Base"},{"name":"listArray","entity":"value","module":"Data.Array.Base"},{"name":"accumArray","entity":"value","module":"Data.Array.Base"},{"name":"!","entity":"value","module":"Data.Array.Base"},{"name":"bounds","class":"IArray","entity":"method","module":"Data.Array.Base"},{"name":"indices","entity":"value","module":"Data.Array.Base"},{"name":"elems","entity":"value","module":"Data.Array.Base"},{"name":"assocs","entity":"value","module":"Data.Array.Base"},{"name":"//","entity":"value","module":"Data.Array.Base"},{"name":"accum","entity":"value","module":"Data.Array.Base"},{"name":"amap","entity":"value","module":"Data.Array.Base"},{"name":"ixmap","entity":"value","module":"Data.Array.Base"}]
2 changes: 1 addition & 1 deletion libraries/array-0.4.0.2/Data/Array/IO.names
@@ -1 +1 @@
[{"origin":{"name":"freeze","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"value"},{"origin":{"name":"getAssocs","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"value"},{"origin":{"name":"getElems","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"value"},{"origin":{"name":"mapArray","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"value"},{"origin":{"name":"mapIndices","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"value"},{"origin":{"name":"newListArray","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"value"},{"origin":{"name":"readArray","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"value"},{"origin":{"name":"thaw","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"value"},{"origin":{"name":"writeArray","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"value"},{"origin":{"name":"castIOUArray","module":"Data.Array.IO","package":"array-0.4.0.2"},"fixity":null,"entity":"value"},{"origin":{"name":"hGetArray","module":"Data.Array.IO","package":"array-0.4.0.2"},"fixity":null,"entity":"value"},{"origin":{"name":"hPutArray","module":"Data.Array.IO","package":"array-0.4.0.2"},"fixity":null,"entity":"value"},{"origin":{"name":"unsafeFreeze","module":"Data.Array.MArray","package":"array-0.4.0.2"},"fixity":null,"entity":"value"},{"origin":{"name":"unsafeThaw","module":"Data.Array.MArray","package":"array-0.4.0.2"},"fixity":null,"entity":"value"},{"origin":{"name":"getBounds","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"method","class":{"name":"MArray","module":"Data.Array.Base","package":"array-0.4.0.2"}},{"origin":{"name":"newArray","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"method","class":{"name":"MArray","module":"Data.Array.Base","package":"array-0.4.0.2"}},{"origin":{"name":"newArray_","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"method","class":{"name":"MArray","module":"Data.Array.Base","package":"array-0.4.0.2"}},{"origin":{"name":"inRange","module":"GHC.Arr","package":"base-4.7.0.0"},"fixity":null,"entity":"method","class":{"name":"Ix","module":"GHC.Arr","package":"base-4.7.0.0"}},{"origin":{"name":"index","module":"GHC.Arr","package":"base-4.7.0.0"},"fixity":null,"entity":"method","class":{"name":"Ix","module":"GHC.Arr","package":"base-4.7.0.0"}},{"origin":{"name":"range","module":"GHC.Arr","package":"base-4.7.0.0"},"fixity":null,"entity":"method","class":{"name":"Ix","module":"GHC.Arr","package":"base-4.7.0.0"}},{"origin":{"name":"rangeSize","module":"GHC.Arr","package":"base-4.7.0.0"},"fixity":null,"entity":"method","class":{"name":"Ix","module":"GHC.Arr","package":"base-4.7.0.0"}},{"origin":{"name":"IOUArray","module":"Data.Array.IO.Internals","package":"array-0.4.0.2"},"fixity":null,"entity":"newtype"},{"origin":{"name":"IOArray","module":"GHC.IOArray","package":"base-4.7.0.0"},"fixity":null,"entity":"newtype"},{"origin":{"name":"MArray","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"class"},{"origin":{"name":"Ix","module":"GHC.Arr","package":"base-4.7.0.0"},"fixity":null,"entity":"class"}]
[{"name":"IOUArray","entity":"newtype","module":"Data.Array.IO.Internals"},{"name":"castIOUArray","entity":"value","module":"Data.Array.IO"},{"name":"freeze","entity":"value","module":"Data.Array.Base"},{"name":"getAssocs","entity":"value","module":"Data.Array.Base"},{"name":"getElems","entity":"value","module":"Data.Array.Base"},{"name":"mapArray","entity":"value","module":"Data.Array.Base"},{"name":"mapIndices","entity":"value","module":"Data.Array.Base"},{"name":"newListArray","entity":"value","module":"Data.Array.Base"},{"name":"readArray","entity":"value","module":"Data.Array.Base"},{"name":"thaw","entity":"value","module":"Data.Array.Base"},{"name":"writeArray","entity":"value","module":"Data.Array.Base"},{"name":"unsafeFreeze","entity":"value","module":"Data.Array.MArray"},{"name":"unsafeThaw","entity":"value","module":"Data.Array.MArray"},{"name":"getBounds","class":"MArray","entity":"method","module":"Data.Array.Base"},{"name":"newArray","class":"MArray","entity":"method","module":"Data.Array.Base"},{"name":"newArray_","class":"MArray","entity":"method","module":"Data.Array.Base"},{"name":"inRange","class":"Ix","entity":"method","module":"GHC.Arr"},{"name":"index","class":"Ix","entity":"method","module":"GHC.Arr"},{"name":"range","class":"Ix","entity":"method","module":"GHC.Arr"},{"name":"rangeSize","class":"Ix","entity":"method","module":"GHC.Arr"},{"name":"MArray","entity":"class","module":"Data.Array.Base"},{"name":"Ix","entity":"class","module":"GHC.Arr"},{"name":"hGetArray","entity":"value","module":"Data.Array.IO"},{"name":"hPutArray","entity":"value","module":"Data.Array.IO"}]
2 changes: 1 addition & 1 deletion libraries/array-0.4.0.2/Data/Array/IO/Internals.names
@@ -1 +1 @@
[{"origin":{"name":"castIOUArray","module":"Data.Array.IO.Internals","package":"array-0.4.0.2"},"fixity":null,"entity":"value"},{"origin":{"name":"unsafeThawIOUArray","module":"Data.Array.IO.Internals","package":"array-0.4.0.2"},"fixity":null,"entity":"value"},{"origin":{"name":"IOUArray","module":"Data.Array.IO.Internals","package":"array-0.4.0.2"},"type":{"name":"IOUArray","module":"Data.Array.IO.Internals","package":"array-0.4.0.2"},"fixity":null,"entity":"constructor"},{"origin":{"name":"IOArray","module":"GHC.IOArray","package":"base-4.7.0.0"},"type":{"name":"IOArray","module":"GHC.IOArray","package":"base-4.7.0.0"},"fixity":null,"entity":"constructor"},{"origin":{"name":"IOUArray","module":"Data.Array.IO.Internals","package":"array-0.4.0.2"},"fixity":null,"entity":"newtype"},{"origin":{"name":"IOArray","module":"GHC.IOArray","package":"base-4.7.0.0"},"fixity":null,"entity":"newtype"}]
[{"name":"IOUArray","entity":"newtype","module":"Data.Array.IO.Internals"},{"name":"IOUArray","entity":"constructor","type":"IOUArray","module":"Data.Array.IO.Internals"},{"name":"castIOUArray","entity":"value","module":"Data.Array.IO.Internals"},{"name":"unsafeThawIOUArray","entity":"value","module":"Data.Array.IO.Internals"}]
2 changes: 1 addition & 1 deletion libraries/array-0.4.0.2/Data/Array/IO/Safe.names
@@ -1 +1 @@
[{"origin":{"name":"freeze","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"value"},{"origin":{"name":"getAssocs","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"value"},{"origin":{"name":"getElems","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"value"},{"origin":{"name":"mapArray","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"value"},{"origin":{"name":"mapIndices","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"value"},{"origin":{"name":"newListArray","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"value"},{"origin":{"name":"readArray","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"value"},{"origin":{"name":"thaw","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"value"},{"origin":{"name":"writeArray","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"value"},{"origin":{"name":"hGetArray","module":"Data.Array.IO","package":"array-0.4.0.2"},"fixity":null,"entity":"value"},{"origin":{"name":"hPutArray","module":"Data.Array.IO","package":"array-0.4.0.2"},"fixity":null,"entity":"value"},{"origin":{"name":"getBounds","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"method","class":{"name":"MArray","module":"Data.Array.Base","package":"array-0.4.0.2"}},{"origin":{"name":"newArray","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"method","class":{"name":"MArray","module":"Data.Array.Base","package":"array-0.4.0.2"}},{"origin":{"name":"newArray_","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"method","class":{"name":"MArray","module":"Data.Array.Base","package":"array-0.4.0.2"}},{"origin":{"name":"inRange","module":"GHC.Arr","package":"base-4.7.0.0"},"fixity":null,"entity":"method","class":{"name":"Ix","module":"GHC.Arr","package":"base-4.7.0.0"}},{"origin":{"name":"index","module":"GHC.Arr","package":"base-4.7.0.0"},"fixity":null,"entity":"method","class":{"name":"Ix","module":"GHC.Arr","package":"base-4.7.0.0"}},{"origin":{"name":"range","module":"GHC.Arr","package":"base-4.7.0.0"},"fixity":null,"entity":"method","class":{"name":"Ix","module":"GHC.Arr","package":"base-4.7.0.0"}},{"origin":{"name":"rangeSize","module":"GHC.Arr","package":"base-4.7.0.0"},"fixity":null,"entity":"method","class":{"name":"Ix","module":"GHC.Arr","package":"base-4.7.0.0"}},{"origin":{"name":"IOUArray","module":"Data.Array.IO.Internals","package":"array-0.4.0.2"},"fixity":null,"entity":"newtype"},{"origin":{"name":"IOArray","module":"GHC.IOArray","package":"base-4.7.0.0"},"fixity":null,"entity":"newtype"},{"origin":{"name":"MArray","module":"Data.Array.Base","package":"array-0.4.0.2"},"fixity":null,"entity":"class"},{"origin":{"name":"Ix","module":"GHC.Arr","package":"base-4.7.0.0"},"fixity":null,"entity":"class"}]
[{"name":"IOUArray","entity":"newtype","module":"Data.Array.IO.Internals"},{"name":"freeze","entity":"value","module":"Data.Array.Base"},{"name":"getAssocs","entity":"value","module":"Data.Array.Base"},{"name":"getElems","entity":"value","module":"Data.Array.Base"},{"name":"mapArray","entity":"value","module":"Data.Array.Base"},{"name":"mapIndices","entity":"value","module":"Data.Array.Base"},{"name":"newListArray","entity":"value","module":"Data.Array.Base"},{"name":"readArray","entity":"value","module":"Data.Array.Base"},{"name":"thaw","entity":"value","module":"Data.Array.Base"},{"name":"writeArray","entity":"value","module":"Data.Array.Base"},{"name":"getBounds","class":"MArray","entity":"method","module":"Data.Array.Base"},{"name":"newArray","class":"MArray","entity":"method","module":"Data.Array.Base"},{"name":"newArray_","class":"MArray","entity":"method","module":"Data.Array.Base"},{"name":"inRange","class":"Ix","entity":"method","module":"GHC.Arr"},{"name":"index","class":"Ix","entity":"method","module":"GHC.Arr"},{"name":"range","class":"Ix","entity":"method","module":"GHC.Arr"},{"name":"rangeSize","class":"Ix","entity":"method","module":"GHC.Arr"},{"name":"MArray","entity":"class","module":"Data.Array.Base"},{"name":"Ix","entity":"class","module":"GHC.Arr"},{"name":"hGetArray","entity":"value","module":"Data.Array.IO"},{"name":"hPutArray","entity":"value","module":"Data.Array.IO"}]

0 comments on commit 02c311a

Please sign in to comment.