h2hf.hs revision 012358a4a1161f01355e80708fbd5e156585d3ae
a945f35eff8b6a88009ce73de6d4c862ce58de3csliveModule : $Header$
a945f35eff8b6a88009ce73de6d4c862ce58de3csliveCopyright : (c) Christian Maeder, Uni Bremen 2002-2005
a945f35eff8b6a88009ce73de6d4c862ce58de3csliveLicense : similar to LGPL, see HetCATS/LICENSE.txt or LIZENZ.txt
a945f35eff8b6a88009ce73de6d4c862ce58de3csliveMaintainer : meader@tzi.de
a945f35eff8b6a88009ce73de6d4c862ce58de3csliveStability : experimental
a945f35eff8b6a88009ce73de6d4c862ce58de3cslivePortability : non-portable(uses programatica)
06ba4a61654b3763ad65f52283832ebf058fdf1cslivetest translation from Haskell to Isabelle
9b6a3a558cc90ffdaa0b50bd02546ffec424ded7slivemodule Main where
06ba4a61654b3763ad65f52283832ebf058fdf1csliveimport Isabelle.IsaSign as IsaSign
06ba4a61654b3763ad65f52283832ebf058fdf1csliveimport Haskell.HatAna as HatAna
9b6a3a558cc90ffdaa0b50bd02546ffec424ded7slivepickParser :: (Continuity,Bool) -> AParser () (IsaSign.Sign, [Named IsaSign.Sentence])
9b6a3a558cc90ffdaa0b50bd02546ffec424ded7slivepickParser c = do
06ba4a61654b3763ad65f52283832ebf058fdf1cslive b <- hatParser
06ba4a61654b3763ad65f52283832ebf058fdf1cslive let res@(Result _ m) = do
06ba4a61654b3763ad65f52283832ebf058fdf1cslive (_, _, sig, sens) <- hatAna (b, HatAna.emptySign, emptyGlobalAnnos)
06ba4a61654b3763ad65f52283832ebf058fdf1cslive transTheory (fst c) (snd c) sig sens
06ba4a61654b3763ad65f52283832ebf058fdf1cslive Nothing -> fail $ show res
9b6a3a558cc90ffdaa0b50bd02546ffec424ded7slive Just x -> return x
9b6a3a558cc90ffdaa0b50bd02546ffec424ded7slivemain :: IO ()
06ba4a61654b3763ad65f52283832ebf058fdf1cslive let err = "command line input error: first argument must be"
06ba4a61654b3763ad65f52283832ebf058fdf1cslive ++ " either h (HOL), hc (HOLCF), mh (HOL with theory morphisms),"
a945f35eff8b6a88009ce73de6d4c862ce58de3cslive ++ " mhc (HOLCF with theory morphisms)."
a945f35eff8b6a88009ce73de6d4c862ce58de3cslive l <- getArgs
9b6a3a558cc90ffdaa0b50bd02546ffec424ded7slive [] -> putStrLn err
9b6a3a558cc90ffdaa0b50bd02546ffec424ded7slive c : fs -> let elm = elem $ map toLower c in
a945f35eff8b6a88009ce73de6d4c862ce58de3cslive mapM_ (process (if elm ["h", "hol"] then (NotCont,False)
9b6a3a558cc90ffdaa0b50bd02546ffec424ded7slive else if elm ["hc", "holcf"] then (IsCont,False)
9b6a3a558cc90ffdaa0b50bd02546ffec424ded7slive else if elm ["mh", "mhol"] then (IsCont,True)
9b6a3a558cc90ffdaa0b50bd02546ffec424ded7slive else if elm ["mhc", "mholcf"] then (IsCont,True)
9b6a3a558cc90ffdaa0b50bd02546ffec424ded7slive else error err)) fs
9b6a3a558cc90ffdaa0b50bd02546ffec424ded7sliveprocess :: (Continuity,Bool) -> FilePath -> IO ()
06ba4a61654b3763ad65f52283832ebf058fdf1csliveprocess c fn = do
a945f35eff8b6a88009ce73de6d4c862ce58de3cslive putStrLn $ "translating " ++ show fn ++ " to " ++ case c of
9b6a3a558cc90ffdaa0b50bd02546ffec424ded7slive (IsCont,False) -> "HOLCF"
9b6a3a558cc90ffdaa0b50bd02546ffec424ded7slive (NotCont,False) -> "HOL"
9b6a3a558cc90ffdaa0b50bd02546ffec424ded7slive (IsCont,True) -> "HOLCF with theory morphisms"