Haskell2DG.hs revision e49fd57c63845c7806860a9736ad09f6d44dbaed
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 ManceMaintainer : Christian.Maeder@dfki.de
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel ManceStability : provisional
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel MancePortability : portable
aa64389ee694577d9e665cf57331129000072a79Felix Gabriel Manceprocess Haskell files
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Mancemodule Haskell.Haskell2DG (anaHaskellFile) where
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Manceimport qualified Data.Map as Map
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 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 $ SpecEntry $ ExtGenSig (GenSig esig [] esig) nodeSig
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Mance dg2 = dg1 { globalEnv = gEnv }
6a058c55573e9bbb71cee8a7361ef12bfaedd9efFelix Gabriel Mance return $ Just (ln, libEnv)