49 lines
1.5 KiB
Haskell
49 lines
1.5 KiB
Haskell
{-# LANGUAGE ScopedTypeVariables #-}
|
|
{-# LANGUAGE DeriveGeneric #-}
|
|
{-# LANGUAGE DuplicateRecordFields #-}
|
|
|
|
import Data.Aeson
|
|
import GHC.Generics
|
|
import System.Directory
|
|
import System.Environment
|
|
import System.FilePath
|
|
|
|
import qualified Data.ByteString.Lazy as BS
|
|
|
|
data NorwegianWord = NorwegianWord { word :: String
|
|
, hints :: Maybe [String]
|
|
} deriving (Generic, Show)
|
|
|
|
instance FromJSON NorwegianWord
|
|
instance ToJSON NorwegianWord where
|
|
toEncoding = genericToEncoding defaultOptions
|
|
|
|
data JapaneseWord = JapaneseWord { word :: String
|
|
, romaji :: Maybe String
|
|
, hints :: Maybe [String]
|
|
} deriving (Generic, Show)
|
|
|
|
instance FromJSON JapaneseWord
|
|
instance ToJSON JapaneseWord where
|
|
toEncoding = genericToEncoding defaultOptions
|
|
|
|
data Card = Card { norwegian :: [NorwegianWord]
|
|
, japanese :: [JapaneseWord]
|
|
} deriving (Generic, Show)
|
|
|
|
instance FromJSON Card
|
|
instance ToJSON Card where
|
|
toEncoding = genericToEncoding defaultOptions
|
|
|
|
readJsonFile :: FilePath -> IO (Either String [Card])
|
|
readJsonFile path = eitherDecode <$> BS.readFile path
|
|
|
|
main :: IO ()
|
|
main = do
|
|
dir <- head <$> getArgs
|
|
filePaths <- map (\x -> joinPath [dir, x]) <$> listDirectory dir
|
|
jsonFiles <- mapM readJsonFile filePaths
|
|
-- case jsonFiles of
|
|
-- Right cards -> mapM_ print cards
|
|
-- Left err -> putStr err
|