hsc3-lang-0.15: Haskell SuperCollider Language

Safe HaskellNone
LanguageHaskell98

Sound.SC3.Lang.Collection.Universal.Datum

Contents

Description

Functions to allow using the Sound.OpenSoundControl Datum as a universal data type. In addition to the functions defined below it provides instances for:

Datum are IsString

:set -XOverloadedStrings
"string" :: Datum

Datum are EqE

Int32 5 /=* Int32 6 == Int32 1
Double 5 ==* Double 5 == Double 1

Datum are Num

5 :: Datum
5 + 4 :: Datum
negate 5 :: Datum

Datum are Fractional

5.0 :: Datum
(5 / 4) :: Datum

Datum are Floating

pi :: Datum
sqrt (Int32 4) == Double 2
(2.0 ** 3.0) :: Datum

Datum are Real

toRational (Double 1.5) == (3/2 :: Rational)
(realToFrac (1.5 :: Double) :: Datum) == Double 1.5
(realToFrac (Double 1.5) :: Datum) == Double 1.5
(realToFrac (Double 1.5) :: Double) == 1.5

Datum are RealFrac

round (Double 1.4) == 1

Datum are RealFracE

roundE (Double 1.4) == Double 1
ceilingE (Double 1.4) == Double 2

Datum are RealFloat

isNaN (sqrt (negate (Int32 1))) == True

Datum are Ord

Double 7.5 > Int32 7
string "because" > string "again"

Datum are OrdE

Int32 7 >* Int32 7 == Int32 0
Double 7.5 >* Int32 7 == Double 1

Datum are Enum

[Int32 0 .. Int32 4] == [Int32 0,Int32 1,Int32 2,Int32 3,Int32 4]
[Double 1 .. Double 3] == [Double 1,Double 2,Double 3]

Datum are Random

System.Random.randomRIO (Int32 0,Int32 9):: IO Datum
System.Random.randomRIO (Float 0,Float 1):: IO Datum

Synopsis

Lifting

type UOp n = n -> n Source

Unary operator.

liftD :: UOp Int32 -> UOp Int64 -> UOp Float -> UOp Double -> UOp Datum Source

Lift an equivalent set of Int32, Int64, Float and Double unary functions to Datum.

map (liftD abs abs abs abs) [Int32 5,Float (-5)] == [Int32 5,Float 5]

liftD' :: UOp Double -> UOp Datum Source

Lift a Double unary operator to Datum via datum_promote.

liftD' negate (Int 5) == Double (-5)

type BinOp n = n -> n -> n Source

A binary operator.

liftD2 :: BinOp Int32 -> BinOp Int64 -> BinOp Float -> BinOp Double -> BinOp Datum Source

Given Int32, Int64, Float and Double binary operators generate Datum operator. If Datum are of equal type result type is equal, else result type is Double.

liftD2 (+) (+) (+) (+) (Float 1) (Float 2) == Float 3
liftD2 (*) (*) (*) (*) (Int32 3) (Float 4) == Double 12

liftD2' :: BinOp Double -> BinOp Datum Source

A datum_promote variant of liftD2.

liftD2' (+) (Float 1) (Float 2) == Double 3

At

atD :: (Int32 -> a) -> (Int64 -> a) -> (Float -> a) -> (Double -> a) -> Datum -> a Source

Direct unary Int32, Int64, Float and Double functions at Datum fields, or error.

atD show show show show (Int 5) == "5"

atD' :: (Double -> a) -> Datum -> a Source

Lift a Double at operator to Datum via datum_promote.

atD' floatRadix (Int 5) == 2

type BinAt n a = n -> n -> a Source

Binary at function.

atD2 :: BinAt Int32 a -> BinAt Int64 a -> BinAt Float a -> BinAt Double a -> BinAt Datum a Source

Direct binary Int, Float and Double functions at Datum fields, or error.

type TriAt n a = n -> n -> n -> a Source

Ternary at function.

atD3 :: TriAt Int32 a -> TriAt Int64 a -> TriAt Float a -> TriAt Double a -> TriAt Datum a Source

Direct ternary Int, Float and Double functions at Datum fields, or error.