@@ -14,15 +14,21 @@
1414
1515module Main where
1616
17−import qualified Language.PureScript as P
18−import System.Console.CmdTheLine
1917import Control.Applicative
2018import Control.Monad (forM)
19+
20+import Data.Version (showVersion)
21+
22+import System.Console.CmdTheLine
23+import System.Directory (createDirectoryIfMissing)
24+import System.FilePath (takeDirectory)
2125import System.Exit (exitSuccess, exitFailure)
22−import qualified System.IO.UTF8 as U
26+
2327import Text.Parsec (ParseError)
28+
29+import qualified Language.PureScript as P
2430import qualified Paths_purescript as Paths
25−import Data.Version (showVersion)
31+import qualified System.IO.UTF8 as U
2632
2733preludeFilename :: IO FilePath
2834preludeFilename = Paths.getDataFileName "prelude/prelude.purs"
@@ -47,12 +53,15 @@ compile opts input output externs = do
4753 exitFailure
4854 Right (js, exts, _) -> do
4955 case output of
50− Just path -> U.writeFile path js
56+ Just path -> mkdirp path >> U.writeFile path js
5157 Nothing -> U.putStrLn js
5258 case externs of
59+ Just path -> mkdirp path >> U.writeFile path exts
5360 Nothing -> return ()
54− Just filePath -> U.writeFile filePath exts
5561 exitSuccess
62+ where
63+ mkdirp :: FilePath -> IO ()
64+ mkdirp = createDirectoryIfMissing True . takeDirectory
5665
5766useStdIn :: Term Bool
5867useStdIn = value . flag $ (optInfo [ "s", "stdin" ])