packages feed

haskore 0.1.0.4 → 0.2

raw patch · 20 files changed

+135/−145 lines, 20 filesdep ~event-listdep ~non-negativePVP ok

version bump matches the API change (PVP)

Dependency ranges changed: event-list, non-negative

API changes (from Hackage documentation)

- Haskore.Interface.CSound.Score: fromPerformanceBE :: C time => (time -> Time) -> T time T -> T
+ Haskore.Interface.CSound.Score: fromPerformanceBE :: (C time, Num time) => (time -> Time) -> T time T -> T
- Haskore.Interface.CSound.Tutorial: play :: Output out => FilePath -> (Name, T, TutOrchestra out) -> IO ()
+ Haskore.Interface.CSound.Tutorial: play :: Output out => FilePath -> (Name, T, TutOrchestra out) -> IO ExitCode
- Haskore.Interface.CSound.Tutorial: test :: Output out => (Name, T, TutOrchestra out) -> IO ()
+ Haskore.Interface.CSound.Tutorial: test :: Output out => (Name, T, TutOrchestra out) -> IO ExitCode
- Haskore.Interface.CSound.TutorialCustom: play :: Output out => FilePath -> (Name, T, TutOrchestra out) -> IO ()
+ Haskore.Interface.CSound.TutorialCustom: play :: Output out => FilePath -> (Name, T, TutOrchestra out) -> IO ExitCode
- Haskore.Interface.CSound.TutorialCustom: test :: Output out => (Name, T, TutOrchestra out) -> IO ()
+ Haskore.Interface.CSound.TutorialCustom: test :: Output out => (Name, T, TutOrchestra out) -> IO ExitCode
- Haskore.Interface.MIDI.Render: play :: String -> [String] -> T -> IO ()
+ Haskore.Interface.MIDI.Render: play :: String -> [String] -> T -> IO ExitCode
- Haskore.Interface.MIDI.Render: playAlsa :: T -> IO ()
+ Haskore.Interface.MIDI.Render: playAlsa :: T -> IO ExitCode
- Haskore.Interface.MIDI.Render: playLinux :: T -> IO ()
+ Haskore.Interface.MIDI.Render: playLinux :: T -> IO ExitCode
- Haskore.Interface.MIDI.Render: playTest :: IO ()
+ Haskore.Interface.MIDI.Render: playTest :: IO ExitCode
- Haskore.Interface.MIDI.Render: playTimidity :: T -> IO ()
+ Haskore.Interface.MIDI.Render: playTimidity :: T -> IO ExitCode
- Haskore.Interface.MIDI.Render: playTimidityJack :: T -> IO ()
+ Haskore.Interface.MIDI.Render: playTimidityJack :: T -> IO ExitCode
- Haskore.Interface.MIDI.Render: playWin95 :: T -> IO ()
+ Haskore.Interface.MIDI.Render: playWin95 :: T -> IO ExitCode
- Haskore.Interface.MIDI.Render: playWinNT :: T -> IO ()
+ Haskore.Interface.MIDI.Render: playWinNT :: T -> IO ExitCode

Files

haskore.cabal view
@@ -1,5 +1,5 @@ Name:           haskore-Version:        0.1.0.4+Version:        0.2 License:        GPL License-File:   LICENSE Author:         Paul Hudak <paul.hudak@yale.edu>, Henning Thielemann@@ -30,6 +30,7 @@   src/Doc/Pics/poly.eps   src/Test/CSound/Makefile   src/Test/MIDI/Makefile+  src/Haskore.lhs  Source-Repository head   type:     darcs@@ -38,7 +39,7 @@ Source-Repository this   type:     darcs   location: http://code.haskell.org/haskore/revised/core-  tag:      0.1.1+  tag:      0.2  Flag splitBase   description: Choose the new smaller, split-up base package.@@ -49,10 +50,10 @@  Library   Build-Depends:-    midi >=0.1.1 && <0.2,-    event-list >=0.0.8 && <0.1,     markov-chain >=0.0.1 && <0.1,-    non-negative >=0.0.1 && <0.1,+    midi >=0.1.1 && <0.2,+    event-list >=0.1 && <0.2,+    non-negative >=0.1 && <0.2,     data-accessor >=0.2 && <0.3,     utility-ht >=0.0.3 && <0.1,     transformers >=0.0.1 && <0.3,@@ -75,94 +76,93 @@   GHC-Options:    -Wall     -- with GHC-6.4.1 and option -O2 the compilation of NewResolution needs too much heap, thus swapping -  Hs-source-dirs: src-  Exposed-modules:-    Haskore,-    Haskore.Basic.Duration,-    Haskore.Basic.Dynamics,-    Haskore.Basic.Interval,-    Haskore.Basic.Pitch,-    Haskore.Basic.Scale,-    Haskore.Basic.Tempo,-    Haskore.Composition.Chord,-    Haskore.Composition.ChordType,-    Haskore.Composition.Drum,-    Haskore.Composition.Rhythm,-    Haskore.Composition.Trill,-    Haskore.Example.BesondrerTag,-    Haskore.Example.ChildSong6,-    Haskore.Example.Detail,-    Haskore.Example.Flip,-    Haskore.Example.Fractal,-    Haskore.Example.Guitar,-    Haskore.Example.HeilandHimmel,-    Haskore.Example.Kantate147,-    Haskore.Example.Miscellaneous,-    Haskore.Example.NewResolutions,-    Haskore.Example.Raenzlein,-    Haskore.Example.SelfSim,-    Haskore.Example.Ssf,-    Haskore.Example.WhiteChristmas,-    Haskore.Interface.AutoTrack.ChartBar,-    Haskore.Interface.AutoTrack.ChordChart,-    Haskore.Interface.AutoTrack.ChordSymbol,-    Haskore.Interface.AutoTrack.EventChart,-    Haskore.Interface.AutoTrack.Instrument,-    Haskore.Interface.AutoTrack.ScaleChart,-    Haskore.Interface.AutoTrack.Style,-    Haskore.Interface.AutoTrack.Transposeable,-    Haskore.Interface.CSound,-    Haskore.Interface.CSound.Generator,-    Haskore.Interface.CSound.InstrumentMap,-    Haskore.Interface.CSound.Note,-    Haskore.Interface.CSound.Orchestra,-    Haskore.Interface.CSound.OrchestraFunction,-    Haskore.Interface.CSound.Score,-    Haskore.Interface.CSound.SoundMap,-    Haskore.Interface.CSound.Tutorial,-    Haskore.Interface.CSound.TutorialCustom,+  Hs-Source-Dirs: src+  Exposed-Modules:+    Haskore.Basic.Duration+    Haskore.Basic.Dynamics+    Haskore.Basic.Interval+    Haskore.Basic.Pitch+    Haskore.Basic.Scale+    Haskore.Basic.Tempo+    Haskore.Composition.Chord+    Haskore.Composition.ChordType+    Haskore.Composition.Drum+    Haskore.Composition.Rhythm+    Haskore.Composition.Trill+    Haskore.Example.BesondrerTag+    Haskore.Example.ChildSong6+    Haskore.Example.Detail+    Haskore.Example.Flip+    Haskore.Example.Fractal+    Haskore.Example.Guitar+    Haskore.Example.HeilandHimmel+    Haskore.Example.Kantate147+    Haskore.Example.Miscellaneous+    Haskore.Example.NewResolutions+    Haskore.Example.Raenzlein+    Haskore.Example.SelfSim+    Haskore.Example.Ssf+    Haskore.Example.WhiteChristmas+    Haskore.Interface.AutoTrack.ChartBar+    Haskore.Interface.AutoTrack.ChordChart+    Haskore.Interface.AutoTrack.ChordSymbol+    Haskore.Interface.AutoTrack.EventChart+    Haskore.Interface.AutoTrack.Instrument+    Haskore.Interface.AutoTrack.ScaleChart+    Haskore.Interface.AutoTrack.Style+    Haskore.Interface.AutoTrack.Transposeable+    Haskore.Interface.CSound+    Haskore.Interface.CSound.Generator+    Haskore.Interface.CSound.InstrumentMap+    Haskore.Interface.CSound.Note+    Haskore.Interface.CSound.Orchestra+    Haskore.Interface.CSound.OrchestraFunction+    Haskore.Interface.CSound.Score+    Haskore.Interface.CSound.SoundMap+    Haskore.Interface.CSound.Tutorial+    Haskore.Interface.CSound.TutorialCustom     -- needs 'parsec' package-    Haskore.Interface.MED.Text,-    Haskore.Interface.MIDI,-    Haskore.Interface.MIDI.InstrumentMap,-    Haskore.Interface.MIDI.Note,-    Haskore.Interface.MIDI.Read,-    Haskore.Interface.MIDI.Render,-    Haskore.Interface.MIDI.Write,-    Haskore.Interface.MML,-    Haskore.Melody,-    Haskore.Melody.Standard,-    Haskore.Music,-    Haskore.Music.GeneralMIDI,-    Haskore.Music.Rhythmic,-    Haskore.Music.Standard,-    Haskore.Performance,-    Haskore.Performance.BackEnd,-    Haskore.Performance.Context,-    Haskore.Performance.Player,-    Haskore.Performance.Default,-    Haskore.Performance.Fancy,-    Haskore.Process.Format,-    Haskore.Process.Optimization,-    Medium,-    Medium.Temporal,-    Medium.Plain.Binary,-    Medium.Plain.List,-    Medium.Plain.ContextFreeGrammar,-    Medium.Controlled,-    Medium.Controlled.List,-    Medium.Controlled.ContextFreeGrammar,+    Haskore.Interface.MED.Text+    Haskore.Interface.MIDI+    Haskore.Interface.MIDI.InstrumentMap+    Haskore.Interface.MIDI.Note+    Haskore.Interface.MIDI.Read+    Haskore.Interface.MIDI.Render+    Haskore.Interface.MIDI.Write+    Haskore.Interface.MML+    Haskore.Melody+    Haskore.Melody.Standard+    Haskore.Music+    Haskore.Music.GeneralMIDI+    Haskore.Music.Rhythmic+    Haskore.Music.Standard+    Haskore.Performance+    Haskore.Performance.BackEnd+    Haskore.Performance.Context+    Haskore.Performance.Player+    Haskore.Performance.Default+    Haskore.Performance.Fancy+    Haskore.Process.Format+    Haskore.Process.Optimization+    Medium+    Medium.Temporal+    Medium.Plain.Binary+    Medium.Plain.List+    Medium.Plain.ContextFreeGrammar+    Medium.Controlled+    Medium.Controlled.List+    Medium.Controlled.ContextFreeGrammar     Medium.LabeledControlled.List-  Other-modules:-    Haskore.General.LoopTreeRecursive,-    Haskore.General.LoopTreeRecursiveGen,-    Haskore.General.LoopTreeTagged,-    Haskore.General.LoopTreeTaggedGen,-    Haskore.General.GraphRecursiveGen,-    Haskore.General.GraphTaggedGen,-    Haskore.General.LetRec,-    Haskore.General.Map,-    Haskore.General.TagDictionary,+  Other-Modules:+    Haskore.General.LoopTreeRecursive+    Haskore.General.LoopTreeRecursiveGen+    Haskore.General.LoopTreeTagged+    Haskore.General.LoopTreeTaggedGen+    Haskore.General.GraphRecursiveGen+    Haskore.General.GraphTaggedGen+    Haskore.General.LetRec+    Haskore.General.Map+    Haskore.General.TagDictionary     Haskore.General.Utility  Executable test
src/Haskore.lhs view
@@ -35,25 +35,25 @@ At the module level, Haskore is organized as follows: \begin{haskelllisting} -> module Haskore (module Haskore,->                 module Haskore.Music,->                 module Haskore.Performance,->                 module Haskore.Performance.Player,->                 module Haskore.Interface.MIDI.Write,->                 module Haskore.Interface.MIDI.Read,->                 module Sound.MIDI.File.Save,->                 module Sound.MIDI.File.Load,->                 module Haskore.Interface.MIDI.Render)->        where+> module Haskore (+>    module Haskore.Music,+>    module Haskore.Performance,+>    module Haskore.Performance.Player,+>    module Haskore.Interface.MIDI.Write,+>    module Haskore.Interface.MIDI.Read,+>    module Haskore.Interface.MIDI.Render,+>    module Sound.MIDI.File.Save,+>    module Sound.MIDI.File.Load,+>    ) where > > import qualified Haskore.Music > import qualified Haskore.Performance > import qualified Haskore.Performance.Player > import qualified Haskore.Interface.MIDI.Write > import qualified Haskore.Interface.MIDI.Read+> import qualified Haskore.Interface.MIDI.Render > import qualified Sound.MIDI.File.Save > import qualified Sound.MIDI.File.Load-> import qualified Haskore.Interface.MIDI.Render  \end{haskelllisting} 
src/Haskore/Composition/Drum.lhs view
@@ -22,7 +22,7 @@ > import Haskore.Composition.Trill > import qualified Haskore.Basic.Duration as Duration > import Haskore.Basic.Duration (qn, en, )-> import Haskore.Music (qnr, enr, (=:=), changeTempo, rest, line)+> import Haskore.Music (qnr, enr, (=:=), changeTempo, rest, ) > import Haskore.Melody.Standard (NoteAttributes, na, )  > import qualified Haskore.Music             as Music
src/Haskore/Example/HeilandHimmel.hs view
@@ -10,7 +10,6 @@  import           Haskore.Melody.Standard   as Melody import           Haskore.Music.GeneralMIDI as MidiMusic-import qualified Haskore.Music             as Music   noAttr :: [Melody.NoteAttributes -> Melody.T] -> Melody.T
src/Haskore/Example/Kantate147.hs view
@@ -20,11 +20,10 @@ import qualified Medium.Controlled.ContextFreeGrammar as Grammar import qualified Data.MarkovChain as MarkovChain -import qualified Sound.MIDI.File         as MidiFile+import qualified Haskore.Interface.MIDI.Write         as WriteMidi import qualified Haskore.Interface.MIDI.InstrumentMap as InstrumentMap-import qualified Haskore.Interface.MIDI.Write        as WriteMidi-import qualified Sound.MIDI.File.Save         as SaveMidi-import qualified Sound.MIDI.General      as GeneralMidi+import qualified Sound.MIDI.File.Save    as SaveMidi+import qualified Sound.MIDI.File         as MidiFile  import qualified Data.List as List 
src/Haskore/Example/Miscellaneous.lhs view
@@ -11,7 +11,6 @@ > import qualified Haskore.Music           as Music > import           Haskore.Music (rest, delay, (/=:)) > import           Haskore.Music.GeneralMIDI as MidiMusic-> import           Haskore.Music.Standard  as StdMusic > import qualified Haskore.Music.Rhythmic  as RhyMusic > import qualified Haskore.Melody          as Melody > import           Haskore.Melody.Standard as StdMelody@@ -34,7 +33,6 @@ > import           Haskore.Basic.Duration ((%+)) > import qualified Numeric.NonNegative.Wrapper as NonNeg -> import System.IO(IO) > import Data.Tuple.HT (fst3, snd3, thd3, )  
src/Haskore/General/LoopTreeRecursive.lhs view
@@ -4,7 +4,7 @@ > import qualified Haskore.General.TagDictionary as Dict  > import Control.Monad.Trans.State(StateT, evalState, put, get, )-> import Control.Monad (liftM, mapM, )+> import Control.Monad (liftM, )  Loop now needs an ID because there may be more than one of them. 
src/Haskore/Interface/AutoTrack/ChartBar.lhs view
@@ -16,7 +16,6 @@ > import           Data.Char(isSpace, isAlpha)  > import           Haskore.Basic.Duration(wn, (%+), )-> import qualified Haskore.Basic.Duration as Dur  > import Prelude hiding (length) 
src/Haskore/Interface/CSound/OrchestraFunction.lhs view
@@ -1,5 +1,4 @@ > module Haskore.Interface.CSound.OrchestraFunction where-> import Data.List (lookup, )  > {- a fast variant of 'elem' >    precondition: list must be sorted
src/Haskore/Interface/CSound/Score.lhs view
@@ -24,8 +24,6 @@  > import qualified Numeric.NonNegative.Class as NonNeg -> import System.IO- \end{haskelllisting}  We will represent a score file as a sequence of \keyword{score statements}:@@ -128,7 +126,7 @@ achieved by the following two functions: \begin{haskelllisting} -> fromPerformanceBE :: (NonNeg.C time) =>+> fromPerformanceBE :: (NonNeg.C time, Num time) => >    (time -> Time) -> >    PerformanceBE.T time CSNote.T -> T @@ -188,7 +186,7 @@ >          (PerformanceBE.eventDur  event) >          (PerformanceBE.eventNote event)) . >    TimeListAbs.toPairList .->    TimeList.toAbsoluteEventList 0+>    TimeList.toAbsoluteEventList NonNeg.zero > > fromRhythmicPerformance :: >    (RealFrac time, NonNeg.C time, RealFrac dyn, Ord drum, Ord instr) =>
src/Haskore/Interface/CSound/Tutorial.lhs view
@@ -31,8 +31,8 @@ > import Haskore.Music ((+:+), (=:=), qnr) > import Haskore.Melody as Melody -> import System.IO-> import System.Cmd( system )+> import System.Cmd (system, )+> import System.Exit (ExitCode, )  \end{haskelllisting} @@ -1181,7 +1181,7 @@ are put by \function{CSound.Score.statementToWords}. \begin{haskelllisting} -> test :: Output out => (Name, Score.T, TutOrchestra out) -> IO ()+> test :: Output out => (Name, Score.T, TutOrchestra out) -> IO ExitCode > test = play csoundDir > > toOrchestra :: Output out => TutOrchestra out -> Orchestra.T out@@ -1189,7 +1189,7 @@ >    Orchestra.Cons hd (SoundMap.instrumentTableToInstrBlocks instrs) > > play :: Output out =>->    FilePath -> (Name, Score.T, TutOrchestra out) -> IO ()+>    FilePath -> (Name, Score.T, TutOrchestra out) -> IO ExitCode > play dir (name, s, o') = >    let scorename = name ++ ".sco" >        orchname  = name ++ ".orc"@@ -1219,7 +1219,6 @@ >           system (dir ++ "/csound.exe -W -o " ++ wavename >                     ++ " " ++ orchname ++ " " ++ scorename) > -}->           return ()  \end{haskelllisting} 
src/Haskore/Interface/CSound/TutorialCustom.lhs view
@@ -30,8 +30,8 @@ > import Haskore.Music ((+:+), (=:=), qnr) > import Haskore.Melody as Melody -> import System.IO-> import System.Cmd( system )+> import System.Cmd (system, )+> import System.Exit (ExitCode, )  > lineCS :: EvalRate -> SigExp -> SigExp >               -> SigExp -> SigExp@@ -1213,7 +1213,7 @@ are put by \function{CSound.Score.statementToWords}. \begin{haskelllisting} -> test :: Output out => (Name, Score.T, TutOrchestra out) -> IO ()+> test :: Output out => (Name, Score.T, TutOrchestra out) -> IO ExitCode > test = play csoundDir > > applyOutFunc :: OutFunc out -> out@@ -1227,7 +1227,7 @@ >                  InstrBlock i 0 (applyOutFunc out) []) instrs) > > play :: Output out =>->    FilePath -> (Name, Score.T, TutOrchestra out) -> IO ()+>    FilePath -> (Name, Score.T, TutOrchestra out) -> IO ExitCode > play dir (name, s, o') = >    let scorename = name ++ ".sco" >        orchname  = name ++ ".orc"@@ -1257,7 +1257,6 @@ >           system (dir ++ "/csound.exe -W -o " ++ wavename >                     ++ " " ++ orchname ++ " " ++ scorename) > -}->           return ()  \end{haskelllisting} 
src/Haskore/Interface/MED/Text.hs view
@@ -8,7 +8,6 @@ module Haskore.Interface.MED.Text where  import qualified Haskore.Basic.Pitch as Pitch-import qualified Haskore.Music       as Music import qualified Haskore.Melody      as Melody  import qualified Haskore.Process.Format as Fmt@@ -78,8 +77,8 @@                   (Parse.satisfy (\p -> 'A' <= p && p <= 'V'))))        return (Just ((octave,pitchClass), instr)))    <|>-   (do Parse.char '-'-       ParseComb.count 4 ParseComb.anyToken+   (do _ <- Parse.char '-'+       _ <- ParseComb.count 4 ParseComb.anyToken        return Nothing)  parseCell :: CharParser () (Maybe (Pitch.T,Instrument), String)
src/Haskore/Interface/MIDI/Note.lhs view
@@ -17,7 +17,6 @@ > import qualified Haskore.Basic.Pitch                  as Pitch > import           Data.Ord.HT (limit, ) > import           Data.Maybe.HT (toMaybe, )-> import qualified Data.List as List  > data T = >    Cons {
src/Haskore/Interface/MIDI/Read.lhs view
@@ -14,12 +14,11 @@ > import qualified Haskore.Interface.MIDI.InstrumentMap as InstrMap > import           Sound.MIDI.File                  as MidiFile > import qualified Sound.MIDI.File.Event            as MidiFileEvent-> import qualified Sound.MIDI.File.Event.Meta       as MetaEvent > import qualified Sound.MIDI.Message.Channel       as ChannelMsg > import qualified Sound.MIDI.Message.Channel.Voice as Voice > import qualified Sound.MIDI.General               as GeneralMidi-> import Sound.MIDI.File.Event (T(MIDIEvent, MetaEvent), ElapsedTime, )-> import Sound.MIDI.File.Event.Meta (T(SetTempo), ElapsedTime, Tempo, defltST, defltDurT, )+> import Sound.MIDI.File.Event (T(MIDIEvent, MetaEvent), )+> import Sound.MIDI.File.Event.Meta (T(SetTempo), defltST, defltDurT, ) > import Sound.MIDI.Message.Channel (Body(Voice), Channel, ) > import Sound.MIDI.Message.Channel.Voice (Program, ) >
src/Haskore/Interface/MIDI/Render.lhs view
@@ -24,7 +24,8 @@ > import qualified Numeric.NonNegative.Class   as NonNeg > import qualified Numeric.NonNegative.Wrapper as NonNegW -> import System.Cmd (rawSystem)+> import System.Cmd (rawSystem, )+> import System.Exit (ExitCode, )  \end{haskelllisting} }@@ -106,14 +107,13 @@ > fileName :: FilePath > fileName = "test.mid" -> play :: String -> [String] -> MidiMusic.T -> IO ()+> play :: String -> [String] -> MidiMusic.T -> IO ExitCode > play cmd opts m = >    do fileFromGeneralMIDIMusic fileName m >       rawSystem cmd (opts ++ [fileName])->       return () > > playWin95, playWinNT,->    playLinux, playAlsa, playTimidity, playTimidityJack :: MidiMusic.T -> IO ()+>    playLinux, playAlsa, playTimidity, playTimidityJack :: MidiMusic.T -> IO ExitCode > playWin95        = play "mplayer" [] > playWinNT        = play "mplay32" [] > playLinux        = play "playmidi" ["-rf"]@@ -132,10 +132,9 @@ {\small \begin{haskelllisting} -> playTest :: IO ()+> playTest :: IO ExitCode > playTest =->    do rawSystem "mplay32" [fileName]->       return ()+>    rawSystem "mplay32" [fileName]  \end{haskelllisting} } 
src/Haskore/Interface/MIDI/Write.lhs view
@@ -398,7 +398,9 @@ >        d = PerformanceBE.eventDur  ev >        (mec0, mec1) = MidiNote.toMIDIEvents note >    in  maybe (TimeList.consBody mec0)->           (\pcME -> TimeList.consBody pcME . TimeList.cons 0 mec0)+>           (\pcME ->+>               TimeList.consBody pcME .+>               TimeList.cons NonNeg.zero mec0) >           progChange >           (TimeList.insert d mec1 mevs) 
src/Haskore/Interface/MML.lhs view
@@ -9,7 +9,6 @@ > import qualified Haskore.Melody         as Melody > import           Haskore.Basic.Duration((%+)) -> import qualified Data.List as List > import Control.Monad.Trans.State (State, state, evalState, )  \end{haskelllisting}
src/Haskore/Performance/Fancy.lhs view
@@ -14,8 +14,8 @@  > import Haskore.Performance (eventDur, ) -> -- import qualified Data.EventList.Relative.TimeBody    as TimeList-> import qualified Data.EventList.Relative.TimeTime  as TimeListPad+> -- import qualified Data.EventList.Relative.TimeBody  as TimeList+> -- import qualified Data.EventList.Relative.TimeTime  as TimeListPad > import qualified Data.EventList.Relative.MixedTime as TimeListPad > import qualified Data.EventList.Relative.BodyTime  as BodyTimeList 
src/Test/CSound/Makefile view
@@ -1,2 +1,5 @@ %.wav:	%.orc %.sco 	csound -W -b 1024 -d -m 0 -o $@ $^++play-%:	%.orc %.sco+	OPCODEDIR=/usr/lib/csound/plugins csound -n -o dac $^