{-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE DeriveGeneric #-} module Main(main) where import System.Exit (exitFailure, exitSuccess) import System.IO (stderr, hPutStrLn) import qualified Data.ByteString.Lazy.Char8 as BSL import System.Environment (getArgs) import Control.Monad (forM_, mzero, join) import Control.Applicative import Data.Aeson.AutoType.Alternative import Data.Aeson(decode, Value(..), FromJSON(..), ToJSON(..), pairs, (.:), (.:?), (.=), object) import Data.Monoid import Data.Text (Text) import qualified Data.Text as Text import qualified GHC.Generics import Data.JuPyTer(IPyNb(..), CellsElt(..), parse) main :: IO () main = do filenames <- getArgs forM_ filenames (\f -> parse f >>= (\p -> p `seq` putStrLn $ "Successfully parsed " ++ f ++ ":\n" ++ extract p)) exitSuccess extract :: IPyNb -> String extract = unlines . map (concatMap (alt Text.unpack show) . cellsEltSource) . iPyNbCells