Haskell2DG.hs revision e49fd57c63845c7806860a9736ad09f6d44dbaed
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Mance{- |
e9458b1a7a19a63aa4c179f9ab20f4d50681c168Jens ElknerModule : $Header$
9962d4ebf1d984ef5d6dfd41b82f90b5cbb5d8a6Christian MaederDescription : create a development graph from Haskell modules
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel ManceCopyright : (c) Christian Maeder, Uni Bremen 2006
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel ManceLicense : similar to LGPL, see HetCATS/LICENSE.txt or LIZENZ.txt
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Mance
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel ManceMaintainer : Christian.Maeder@dfki.de
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel ManceStability : provisional
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel MancePortability : portable
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Mance
aa64389ee694577d9e665cf57331129000072a79Felix Gabriel Manceprocess Haskell files
aa64389ee694577d9e665cf57331129000072a79Felix Gabriel Mance-}
aa64389ee694577d9e665cf57331129000072a79Felix Gabriel Mance
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Mancemodule Haskell.Haskell2DG (anaHaskellFile) where
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Mance
aa0ca44e856c87db27e61687cbb630f270976da1Felix Gabriel Manceimport Text.ParserCombinators.Parsec
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Manceimport qualified Data.Map as Map
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Manceimport Common.Result
aa0ca44e856c87db27e61687cbb630f270976da1Felix Gabriel Manceimport Common.Id
feab1106bbee4f2ea2fd48bca7106dd041e4211dFelix Gabriel Manceimport Common.GlobalAnnotations
feab1106bbee4f2ea2fd48bca7106dd041e4211dFelix Gabriel Manceimport Common.LibName
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Manceimport Common.Utils
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Mance
852bd6145634dc2832b61c44678fe539bc1682d5Christian Maederimport Haskell.HatAna
80875f917d741946a39d0ec0b5721e46ba609823Till Mossakowskiimport Haskell.HatParser
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Manceimport Haskell.Logic_Haskell
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Mance
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Manceimport Logic.Logic
80875f917d741946a39d0ec0b5721e46ba609823Till Mossakowskiimport Logic.Prover
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Manceimport Logic.Grothendieck
f50df84ef288927f699d497ec008cec43fad16abSoeren D. Schulze
f50df84ef288927f699d497ec008cec43fad16abSoeren D. Schulzeimport Static.GTheory
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Manceimport Static.DevGraph
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Manceimport Driver.Options
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel ManceanaHaskellFile :: HetcatsOpts -> FilePath -> IO (Maybe (LibName, LibEnv))
f50df84ef288927f699d497ec008cec43fad16abSoeren D. SchulzeanaHaskellFile opts file = do
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Mance str <- readFile file
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Mance putIfVerbose opts 2 $ "Reading file " ++ file
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Mance case runParser hatParser () file str of
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Mance Left err -> do
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Mance putIfVerbose opts 0 $ show err
6d907570443508c99867ea29ddf5e5cb0a2ef8c2Christian Maeder return Nothing
6d907570443508c99867ea29ddf5e5cb0a2ef8c2Christian Maeder Right b -> case hatAna (b, emptySign, emptyGlobalAnnos) of
6d907570443508c99867ea29ddf5e5cb0a2ef8c2Christian Maeder Result es Nothing -> do
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Mance putIfVerbose opts 0 $ unlines $ map show es
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Mance return Nothing
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Mance Result _ (Just (_, sig, sens)) -> do
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Mance let (bas, _, _) = fileparse downloadExtensions file
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Mance mName = mkSimpleId bas
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Mance name = makeName $ mName
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Mance node_contents = newNodeLab name DGBasic
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Mance $ G_theory Haskell sig startSigId (toThSens sens) startThId
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Mance dg = emptyDG
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Mance node = getNewNodeDG dg
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Mance dg1 = insNodeDG (node, node_contents) dg
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Mance moduleS = "Module"
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Mance nodeSig = NodeSig node $ signOf $ dgn_theory node_contents
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Mance ln = emptyLibName moduleS
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Mance esig = EmptyNode $ Logic Haskell
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Mance gEnv = Map.singleton mName
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Mance $ SpecEntry $ ExtGenSig (GenSig esig [] esig) nodeSig
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Mance dg2 = dg1 { globalEnv = gEnv }
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Mance libEnv = Map.singleton ln dg2
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Mance return $ Just (ln, libEnv)
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Mance