packages feed

hid-examples-0.2: genSQL.hs

{-# LANGUAGE OverloadedStrings, ViewPatterns #-}

import Data.Foldable
import Control.Monad.Writer
import qualified Data.Text as T
import qualified Data.Text.IO as TIO
import Data.Monoid

data ErrorMsg = WrongFormat
                   Int
                   T.Text
  deriving Show

type SQL = T.Text

genInsert s1 s2 = "INSERT INTO items VALUES ('" <> s1 <> "','" <> s2 <> "');\n"

processOneLine :: (Int, T.Text) -> Writer [ErrorMsg] SQL 
processOneLine (i, T.splitOn ":" -> [s1, s2]) = pure $ genInsert s1 s2
processOneLine (i, s) = writer (T.empty, [WrongFormat i s])

genSQL :: T.Text -> Writer [ErrorMsg] SQL
genSQL t = T.concat <$> traverse processOneLine (zip [1..] $ T.lines t)


testData = "Pen:Bob\nGlass:Mary:10\nPencil:Alice\nBook:Bob\nBottle"

testGenSQL = do
  let (sql, errors) = runWriter (genSQL testData) 
  TIO.putStrLn "SQL:"
  TIO.putStr sql
  TIO.putStrLn "Errors:"
  traverse_ print errors

main = testGenSQL