module Sound.Audacity.XML.Attribute where

import qualified Sound.Audacity.XML as XML

import qualified Text.XML.Basic.Attribute as Attr
import qualified Text.XML.Basic.Name.MixedCase as Name


string :: String -> (a -> String) -> Attr.T Name.T (a -> String)
string :: forall a. String -> (a -> String) -> T T (a -> String)
string  =  String -> (a -> String) -> T T (a -> String)
forall a. String -> a -> T T a
XML.attr

bool :: String -> (a -> Bool) -> Attr.T Name.T (a -> String)
bool :: forall a. String -> (a -> Bool) -> T T (a -> String)
bool = String -> (a -> Bool) -> T T (a -> String)
forall b a. Enum b => String -> (a -> b) -> T T (a -> String)
enum

enum :: (Enum b) => String -> (a -> b) -> Attr.T Name.T (a -> String)
enum :: forall b a. Enum b => String -> (a -> b) -> T T (a -> String)
enum String
name a -> b
value  =  String -> (a -> String) -> T T (a -> String)
forall a. String -> a -> T T a
XML.attr String
name (Int -> String
forall a. Show a => a -> String
show (Int -> String) -> (a -> Int) -> a -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. b -> Int
forall a. Enum a => a -> Int
fromEnum (b -> Int) -> (a -> b) -> a -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> b
value)

int :: String -> (a -> Int) -> Attr.T Name.T (a -> String)
int :: forall a. String -> (a -> Int) -> T T (a -> String)
int String
name a -> Int
value  =  String -> (a -> String) -> T T (a -> String)
forall a. String -> a -> T T a
XML.attr String
name (Int -> String
forall a. Show a => a -> String
show (Int -> String) -> (a -> Int) -> a -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Int
value)

float :: String -> (a -> Float) -> Attr.T Name.T (a -> String)
float :: forall a. String -> (a -> Float) -> T T (a -> String)
float String
name a -> Float
value  =  String -> (a -> String) -> T T (a -> String)
forall a. String -> a -> T T a
XML.attr String
name (Float -> String
forall a. Show a => a -> String
show (Float -> String) -> (a -> Float) -> a -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Float
value)

double :: String -> (a -> Double) -> Attr.T Name.T (a -> String)
double :: forall a. String -> (a -> Double) -> T T (a -> String)
double String
name a -> Double
value  =  String -> (a -> String) -> T T (a -> String)
forall a. String -> a -> T T a
XML.attr String
name (Double -> String
forall a. Show a => a -> String
show (Double -> String) -> (a -> Double) -> a -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Double
value)