Scale.hs 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. {-# LANGUAGE ViewPatterns #-}
  2. module Hypsibius.Formats.Scale (parse) where
  3. import Data.SCargot
  4. import Data.SCargot.Repr.Basic
  5. import Data.Sequence (Seq)
  6. import qualified Data.Sequence as S
  7. import Data.Text (Text)
  8. -- import qualified Data.Text as T
  9. import Hypsibius.Data (Note(..), Scale(..))
  10. data Atom
  11. = AIdent Text
  12. | AString Text
  13. | AInt Integer
  14. | AFloat Double
  15. | AKWord Text
  16. deriving (Eq, Show)
  17. parseScale :: Text -> Either String Scale
  18. parseScale = undefined
  19. parse = undefined
  20. {-
  21. parse :: Text -> Either String (Seq Note)
  22. parse t = case T.lines t of
  23. ((T.takeWhile (/= '#') -> "hypsibius scale"):rs) -> parseLines rs
  24. _ -> Left "Not a valid Hypsibius scale: missing header\n"
  25. parseLines :: [Text] -> Either String (Seq Note)
  26. parseLines [] = pure S.empty
  27. parseLines (l:ls) =
  28. case T.words (T.takeWhile (/= '#') l) of
  29. [] -> parseLines ls
  30. [cents, name] ->
  31. let n = Note (read (T.unpack cents)) name
  32. in (n S.<|) <$> parseLines ls
  33. rs -> Left ("Bad declaration: " ++ show rs)
  34. -}