@@ -0,0 +1,25 @@
1+{-# LANGUAGE MultiParamTypeClasses #-}
2+{-# LANGUAGE FlexibleInstances #-}
3+import System.Environment (getArgs)
4+import qualified Data.Aeson as J
5+import qualified Data.Yaml as Y
6+import Control.Monad (when)
7+import qualified Data.ByteString as S
8+import qualified Data.ByteString.Lazy as L
9+import Control.Applicative ((<$>))
10+
11+main :: IO ()
12+main = do
13+ args <- getArgs
14+ when (length args > 2) $ error "Usage: json2yaml [in] [out]"
15+ let (input:output:_) = args ++ repeat "-"
16+ mval <- J.decode <$>
17+ case input of
18+ "-" -> L.getContents
19+ _ -> L.readFile input
20+ case mval of
21+ Nothing -> error "Invalid input JSON"
22+ Just val -> do
23+ case output of
24+ "-" -> S.putStr $ Y.encode (val :: Y.Value)
25+ _ -> Y.encodeFile output val