packages feed

hamusic-0.1: src/Music/Analysis/Base.lhs

\begin{code}
-- | 
-- Maintainer : silva.samuel@alumni.uminho.pt
-- Stability  : experimental
-- Portability: portable
-- This module implements common types
module Music.Analysis.Base where
import Data.Char (String)
import Data.Bool (Bool)
import Data.Int (Int)
import Data.Maybe (Maybe(..))
import Data.Ratio (Ratio, (%))
import Prelude (Double, truncate) 
\end{code}

This types are simple redefinitions. 
We explicit Double as Number. This Number is a Real Number. 
Delta is a number that means increment/decrement.
Also explicit String as Text.

This wrapper get Integer number from Real Number. 
Invariant class allows check properties to datatypes.

\begin{code}
-- * Types
-- | Number is Double 
type Number = Double
-- | Delta type is a number
type Delta = Number 
-- | Text is String
type Text = String
-- | Integer Number definition
type IntegerNumber = Int
-- | Ratio Number definition
type RatioNumber = Ratio IntegerNumber
-- | wrapper to get Integer Number
toInteger :: Number -> IntegerNumber
toInteger = truncate 
-- | wrapper to get Ratio Number
toRatio :: IntegerNumber -> RatioNumber
toRatio i = i % 1
-- | Invariant class specification
class Invariant a where
    invariant :: a -> Bool
\end{code}
\begin{nocode}
-- || wrapper to get Integer Number
toRatio :: Number -> RatioNumber
toRatio = flip (%) 1 

-- || Ratio Number definition
type RatioNumber = Ratio Number
\end{nocode}

We also presents utilitary functions, such zip and unzip in Maybe version.
\begin{code}
-- * Auxiliary functions
-- | like @unzip@
unzipMaybe :: [Maybe (a,b)] -> ([Maybe a],[Maybe b])
unzipMaybe [] = ([],[])
unzipMaybe (Just (a1,a2):as) = 
    let (x,y) = unzipMaybe as in (Just a1:x, Just a2:y)
unzipMaybe (Nothing:as) = 
    let (x,y) = unzipMaybe as in (Nothing:x, Nothing:y)
-- | like @zip@
zipMaybe :: ([Maybe a], [Maybe b]) -> [Maybe (a,b)]
zipMaybe ([],[]) = []
zipMaybe (Just x:xs,Just y:ys) = Just (x,y):zipMaybe (xs,ys)
zipMaybe (Nothing:xs,Nothing:ys) = Nothing:zipMaybe (xs,ys)
zipMaybe _ = []
\end{code}