chunksOf function taken from the "split" package by Brent Yorgey 2008-2023
- licensed BSD-3
Copyright (c) 2008 Brent Yorgey, Louis Wasserman
All rights reserved.
Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. Neither the name of the author nor the names of other contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
\ No newline at end of file
diff --git a/docs/doc-index-A.html b/docs/doc-index-A.html
index 6656fbf..7f8493b 100644
--- a/docs/doc-index-A.html
+++ b/docs/doc-index-A.html
@@ -1 +1 @@
-journeyman-0.1.0.0 (Index - A)
\ No newline at end of file
diff --git a/docs/doc-index-All.html b/docs/doc-index-All.html
index 2df6a8b..031f0c1 100644
--- a/docs/doc-index-All.html
+++ b/docs/doc-index-All.html
@@ -1 +1 @@
-journeyman-0.1.0.0 (Index)
\ No newline at end of file
diff --git a/docs/doc-index-B.html b/docs/doc-index-B.html
index 92da68c..0e386b3 100644
--- a/docs/doc-index-B.html
+++ b/docs/doc-index-B.html
@@ -1 +1 @@
-journeyman-0.1.0.0 (Index - B)
\ No newline at end of file
diff --git a/docs/doc-index-C.html b/docs/doc-index-C.html
index 347045d..a28bebf 100644
--- a/docs/doc-index-C.html
+++ b/docs/doc-index-C.html
@@ -1 +1 @@
-journeyman-0.1.0.0 (Index - C)
\ No newline at end of file
diff --git a/docs/doc-index-M.html b/docs/doc-index-M.html
index 4e8ead4..398b241 100644
--- a/docs/doc-index-M.html
+++ b/docs/doc-index-M.html
@@ -1 +1 @@
-journeyman-0.1.0.0 (Index - M)
\ No newline at end of file
diff --git a/docs/doc-index.html b/docs/doc-index.html
index 8841ea7..303ed65 100644
--- a/docs/doc-index.html
+++ b/docs/doc-index.html
@@ -1 +1 @@
-journeyman-0.1.0.0 (Index)
\ No newline at end of file
diff --git a/docs/doc-index.json b/docs/doc-index.json
index e1da85f..35283ea 100644
--- a/docs/doc-index.json
+++ b/docs/doc-index.json
@@ -1 +1 @@
-[{"display_html":"typePlayerCount = Int","name":"PlayerCount","module":"Tourney.Common","link":"Tourney-Common.html#t:PlayerCount"},{"display_html":"newtypePlayer = PlayerInt","name":"Player Player","module":"Tourney.Common","link":"Tourney-Common.html#t:Player"},{"display_html":"newtypeSlot = SlotInt","name":"Slot Slot","module":"Tourney.Common","link":"Tourney-Common.html#t:Slot"},{"display_html":"fromSlot :: Slot -> Int","name":"fromSlot","module":"Tourney.Common","link":"Tourney-Common.html#v:fromSlot"},{"display_html":"newtypeRoundNo = RoundNoInt","name":"RoundNo RoundNo","module":"Tourney.Common","link":"Tourney-Common.html#t:RoundNo"},{"display_html":"dataStandings","name":"Standings","module":"Tourney.Common","link":"Tourney-Common.html#t:Standings"},{"display_html":"createInitialStandings :: PlayerCount -> Standings","name":"createInitialStandings","module":"Tourney.Common","link":"Tourney-Common.html#v:createInitialStandings"},{"display_html":"modifyStandings :: Standings -> (forall s. MVector s Player -> ST s ()) -> Standings","name":"modifyStandings","module":"Tourney.Common","link":"Tourney-Common.html#v:modifyStandings"},{"display_html":"vectorToStandings :: Vector v Player => v Player -> Standings","name":"vectorToStandings","module":"Tourney.Common","link":"Tourney-Common.html#v:vectorToStandings"},{"display_html":"asInt :: Coercible a Int => a -> Int","name":"asInt","module":"Tourney.Common","link":"Tourney-Common.html#v:asInt"},{"display_html":"(..<) :: (Enum a, Num a) => a -> a -> [a]","name":"..<","module":"Tourney.Common","link":"Tourney-Common.html#v:..-60-"},{"display_html":"(..>) :: (Enum a, Num a) => a -> a -> [a]","name":"..>","module":"Tourney.Common","link":"Tourney-Common.html#v:..-62-"},{"display_html":"dataSortMethod
","name":"Mod SetFocus SetOffset","module":"Tourney.Algebra.Unified","link":"Tourney-Algebra-Unified.html#t:Mod"},{"display_html":"(+++) :: Tournament a -> Tournament a -> Tournament a","name":"+++","module":"Tourney.Algebra.Unified","link":"Tourney-Algebra-Unified.html#v:-43--43--43-"},{"display_html":"overlay :: Foldable f => f (Tournament a) -> Tournament a","name":"overlay","module":"Tourney.Algebra.Unified","link":"Tourney-Algebra-Unified.html#v:overlay"},{"display_html":"(***) :: forall a b. (KnownDepth a, KnownDepth b) => Tournament a -> Tournament b -> TournamentTMany","name":"***","module":"Tourney.Algebra.Unified","link":"Tourney-Algebra-Unified.html#v:-42--42--42-"},{"display_html":"sequence :: (Foldable f, KnownDepth a) => f (Tournament a) -> TournamentTMany","name":"sequence","module":"Tourney.Algebra.Unified","link":"Tourney-Algebra-Unified.html#v:sequence"},{"display_html":"dataSortMethod
","name":"Depth TOne TMod TMany","module":"Tourney.Algebra.Unified","link":"Tourney-Algebra-Unified.html#t:Depth"},{"display_html":"classTypeable d => KnownDepth (d :: Depth) where
}","name":"Tourney Tourney $sel:tourneyStream:Tourney $sel:tourneyStreamEnv:Tourney","module":"Tourney.Stream","link":"Tourney-Stream.html#t:Tourney"},{"display_html":"typeTourneyStream m = StreamM m (StreamM m (Compiled (Sorter, StreamM m (CompiledMatch) ())) ()) ()","name":"TourneyStream","module":"Tourney.Stream","link":"Tourney-Stream.html#t:TourneyStream"},{"display_html":"dataCompileError
","name":"CompileError InvalidMatch InvalidFocus $sel:inner:InvalidMatch $sel:outer:InvalidMatch $sel:match:InvalidMatch $sel:focus:InvalidMatch","module":"Tourney.Stream","link":"Tourney-Stream.html#t:CompileError"},{"display_html":"typeCompiled = Either (NonEmptyCompileError)","name":"Compiled","module":"Tourney.Stream","link":"Tourney-Stream.html#t:Compiled"},{"display_html":"createTourney :: forall m a. Monad m => StreamEnv m -> Tournament a -> Tourney m","name":"createTourney","module":"Tourney.Stream","link":"Tourney-Stream.html#v:createTourney"},{"display_html":"runTourney :: Monad m => Tourney m -> TourneyStream m","name":"runTourney","module":"Tourney.Stream","link":"Tourney-Stream.html#v:runTourney"},{"display_html":"newtypeRoundStream m = RoundStream {
}","name":"RoundStream RoundStream $sel:unRoundStream:RoundStream","module":"Tourney.Stream","link":"Tourney-Stream.html#t:RoundStream"},{"display_html":"createRoundStream :: forall m a. Monad m => Tournament a -> RoundStream m","name":"createRoundStream","module":"Tourney.Stream","link":"Tourney-Stream.html#v:createRoundStream"},{"display_html":"newtypeMatchStream m = MatchStream {
}","name":"MatchStream MatchStream $sel:unMatchStream:MatchStream","module":"Tourney.Stream","link":"Tourney-Stream.html#t:MatchStream"},{"display_html":"createMatchStream :: forall m. Monad m => TournamentTOne -> MatchStream m","name":"createMatchStream","module":"Tourney.Stream","link":"Tourney-Stream.html#v:createMatchStream"},{"display_html":"dataInspection t m a = Inspection {
}","name":"Inspection Inspection $sel:playerCount:Inspection $sel:standingsFn:Inspection $sel:query:Inspection","module":"Tourney.Stream","link":"Tourney-Stream.html#t:Inspection"},{"display_html":"dataInspect (t :: Depth) a where
","name":"Inspect ByRound BySorter Flat","module":"Tourney.Stream","link":"Tourney-Stream.html#t:Inspect"},{"display_html":"runInspection :: Monad m => Inspection t m a -> Tournament t -> m a","name":"runInspection","module":"Tourney.Stream","link":"Tourney-Stream.html#v:runInspection"},{"display_html":"pureMatchesByRound :: TournamentTMany -> PlayerCount -> MapByRound (MapByMatches (MaybeResult))","name":"pureMatchesByRound","module":"Tourney.Stream","link":"Tourney-Stream.html#v:pureMatchesByRound"},{"display_html":"dataBuilder t r a","name":"Builder","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#t:Builder"},{"display_html":"classAsSteps a r where
","name":"AsSteps steps","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#t:AsSteps"},{"display_html":"typeSteps = BuilderTMany","name":"Steps","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#t:Steps"},{"display_html":"round_ :: forall a m. (MonadRounds m, AsRound a ()) => a -> m ()","name":"round_","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:round_"},{"display_html":"rounds_ :: AsRound r () => [r] -> Steps s ()","name":"rounds_","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:rounds_"},{"display_html":"asRound :: Round r a -> Round r a","name":"asRound","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:asRound"},{"display_html":"classAsRound a r where
","name":"AsRound toRound","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#t:AsRound"},{"display_html":"typeRound = BuilderTOne","name":"Round","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#t:Round"},{"display_html":"match :: AsMatch m => m -> Round r ()","name":"match","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:match"},{"display_html":"classAsMatch m where
","name":"AsMatch toMatch","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#t:AsMatch"},{"display_html":"list :: Foldable f => f a -> Builder t r a","name":"list","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:list"},{"display_html":"overlaysBy :: (Foldable f, Merge t) => (a -> x) -> f (Builder t x a) -> Builder t r [x]","name":"overlaysBy","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:overlaysBy"},{"display_html":"overlays :: (Foldable f, Merge t) => f (Builder t a a) -> Builder t r [a]","name":"overlays","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:overlays"},{"display_html":"overlays_ :: (Foldable f, Merge t) => f (Builder t a a) -> Builder t r ()","name":"overlays_","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:overlays_"},{"display_html":"getStandings :: Merge t => Builder t () Standings","name":"getStandings","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:getStandings"},{"display_html":"getPlayerCount :: Merge t => Builder t () PlayerCount","name":"getPlayerCount","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:getPlayerCount"},{"display_html":"withFocus :: Merge t => Slot -> Int -> Builder t a a -> Builder ('TMod t) r ()","name":"withFocus","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:withFocus"},{"display_html":"withFocii :: Merge t => (Focus -> [Focus]) -> Builder t a a -> Builder ('TMod t) r ()","name":"withFocii","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:withFocii"},{"display_html":"withOffset :: Merge t => Int -> Builder t a a -> Builder ('TMod t) r ()","name":"withOffset","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:withOffset"},{"display_html":"divideInto :: Int -> Steps () () -> Steps () ()","name":"divideInto","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:divideInto"},{"display_html":"foldAround :: Int -> [Slot] -> [Match]","name":"foldAround","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:foldAround"},{"display_html":"foldAroundMidpoint :: [Slot] -> [Match]","name":"foldAroundMidpoint","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:foldAroundMidpoint"},{"display_html":"swaps :: Merge t => Builder t a a -> Builder t r ()","name":"swaps","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:swaps"},{"display_html":"points :: Merge t => Builder t () () -> Builder t r ()","name":"points","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:points"},{"display_html":"barrier :: Merge t => Builder t () () -> Builder t r ()","name":"barrier","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:barrier"},{"display_html":"inspect :: (Merge t, Merge i) => Inspect i a -> Builder i r r -> Builder t () a","name":"inspect","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:inspect"},{"display_html":"execBuilder :: Merge t => (a -> r) -> Builder t r a -> Tournament t","name":"execBuilder","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:execBuilder"},{"display_html":"execSteps :: (a -> r) -> Steps r a -> TournamentTMany","name":"execSteps","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:execSteps"},{"display_html":"execRound :: (a -> r) -> Round r a -> TournamentTOne","name":"execRound","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:execRound"},{"display_html":"runSteps :: (a -> r) -> Steps r a -> ([r], TournamentTMany)","name":"runSteps","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:runSteps"},{"display_html":"runRound :: (a -> r) -> Round r a -> ([r], TournamentTOne)","name":"runRound","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:runRound"},{"display_html":"getAccum :: Merge t => Builder t r (Tournament t)","name":"getAccum","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:getAccum"},{"display_html":"module Tourney.Algebra.Unified","name":"","module":"Tourney.Algebra","link":""},{"display_html":"module Tourney.Algebra.Builder","name":"","module":"Tourney.Algebra","link":""},{"display_html":"module Tourney.Match","name":"","module":"Tourney.Algebra","link":""},{"display_html":"module Tourney.Common","name":"","module":"Tourney.Algebra","link":""},{"display_html":"singleElimination :: Steps () ()","name":"singleElimination","module":"Tourney.Format.SingleElimination","link":"Tourney-Format-SingleElimination.html#v:singleElimination"},{"display_html":"roundRobin :: Steps () ()","name":"roundRobin","module":"Tourney.Format.RoundRobin","link":"Tourney-Format-RoundRobin.html#v:roundRobin"},{"display_html":"groupRoundRobin :: Int -> Steps () ()","name":"groupRoundRobin","module":"Tourney.Format.RoundRobin","link":"Tourney-Format-RoundRobin.html#v:groupRoundRobin"},{"display_html":"roundRobinEirikAlbrigtsen :: Int -> [[Match]]","name":"roundRobinEirikAlbrigtsen","module":"Tourney.Format.RoundRobin","link":"Tourney-Format-RoundRobin.html#v:roundRobinEirikAlbrigtsen"},{"display_html":"optimalSortingNetwork :: Steps () ()","name":"optimalSortingNetwork","module":"Tourney.Format.OptimalSortingNetwork","link":"Tourney-Format-OptimalSortingNetwork.html#v:optimalSortingNetwork"},{"display_html":"insertionSortNaiive :: Steps () ()","name":"insertionSortNaiive","module":"Tourney.Format.InsertionSort","link":"Tourney-Format-InsertionSort.html#v:insertionSortNaiive"},{"display_html":"insertionSort :: Steps () ()","name":"insertionSort","module":"Tourney.Format.InsertionSort","link":"Tourney-Format-InsertionSort.html#v:insertionSort"},{"display_html":"iCan'tBelieveItCanSort :: Steps () ()","name":"iCan'tBelieveItCanSort","module":"Tourney.Format.ICantBelieveItCanSort","link":"Tourney-Format-ICantBelieveItCanSort.html#v:iCan-39-tBelieveItCanSort"},{"display_html":"doubleElimination :: Steps () ()","name":"doubleElimination","module":"Tourney.Format.DoubleElimination","link":"Tourney-Format-DoubleElimination.html#v:doubleElimination"},{"display_html":"addLosersBracket :: Steps () () -> Steps () ()","name":"addLosersBracket","module":"Tourney.Format.DoubleElimination","link":"Tourney-Format-DoubleElimination.html#v:addLosersBracket"},{"display_html":"linkFun :: Int -> [a] -> [a]","name":"linkFun","module":"Tourney.Format.DoubleElimination","link":"Tourney-Format-DoubleElimination.html#v:linkFun"},{"display_html":"linkFunSwap :: [a] -> [a]","name":"linkFunSwap","module":"Tourney.Format.DoubleElimination","link":"Tourney-Format-DoubleElimination.html#v:linkFunSwap"},{"display_html":"dataSelection","name":"Selection","module":"Tourney.UI.Selection","link":"Tourney-UI-Selection.html#t:Selection"},{"display_html":"new :: MapByRound (MapByMatches (MaybeResult)) -> Selection","name":"new","module":"Tourney.UI.Selection","link":"Tourney-UI-Selection.html#v:new"},{"display_html":"merge :: MapByRound (MapByMatches (MaybeResult)) -> Selection -> Selection","name":"merge","module":"Tourney.UI.Selection","link":"Tourney-UI-Selection.html#v:merge"},{"display_html":"moveRight :: Selection -> Selection","name":"moveRight","module":"Tourney.UI.Selection","link":"Tourney-UI-Selection.html#v:moveRight"},{"display_html":"moveLeft :: Selection -> Selection","name":"moveLeft","module":"Tourney.UI.Selection","link":"Tourney-UI-Selection.html#v:moveLeft"},{"display_html":"current :: Selection -> Maybe (RoundNo, Match)","name":"current","module":"Tourney.UI.Selection","link":"Tourney-UI-Selection.html#v:current"},{"display_html":"dataTourneyOp
","name":"TourneyOp PERFORM_SORTING END_ROUND BEGIN_ROUND MATCH","module":"Tourney.VM.Code","link":"Tourney-VM-Code.html#t:TourneyOp"},{"display_html":"typeCode = VectorTourneyOp","name":"Code","module":"Tourney.VM.Code","link":"Tourney-VM-Code.html#t:Code"},{"display_html":"typeCodeBuilder = BuilderTourneyOp","name":"CodeBuilder","module":"Tourney.VM.Code","link":"Tourney-VM-Code.html#t:CodeBuilder"},{"display_html":"optimiseCodeBuilder :: CodeBuilder -> CodeBuilder","name":"optimiseCodeBuilder","module":"Tourney.VM.Code","link":"Tourney-VM-Code.html#v:optimiseCodeBuilder"},{"display_html":"dataCodeStream m","name":"CodeStream","module":"Tourney.VM.Compile","link":"Tourney-VM-Compile.html#t:CodeStream"},{"display_html":"compile :: Monad m => Tournament t -> StreamEnv m -> CodeStream m","name":"compile","module":"Tourney.VM.Compile","link":"Tourney-VM-Compile.html#v:compile"},{"display_html":"codeSoFar :: CodeStream m -> Code","name":"codeSoFar","module":"Tourney.VM.Compile","link":"Tourney-VM-Compile.html#v:codeSoFar"},{"display_html":"createStreamEnv :: Monad m => PlayerCount -> StreamEnv m","name":"createStreamEnv","module":"Tourney.VM.Compile","link":"Tourney-VM-Compile.html#v:createStreamEnv"},{"display_html":"withGetStandings :: (Focus -> m Standings) -> StreamEnv m -> StreamEnv m","name":"withGetStandings","module":"Tourney.VM.Compile","link":"Tourney-VM-Compile.html#v:withGetStandings"},{"display_html":"debugCodeStream :: MonadCodeStream m c => m Code","name":"debugCodeStream","module":"Tourney.VM.Compile","link":"Tourney-VM-Compile.html#v:debugCodeStream"},{"display_html":"class (Monad m, MonadPrimRealWorld m, Monad c) => MonadCodeStream m c | m -> c where
","name":"MonadCodeStream getCodeStream putCodeStream runCodeStreamEffect","module":"Tourney.VM.Compile","link":"Tourney-VM-Compile.html#t:MonadCodeStream"},{"display_html":"popCodeStream :: MonadCodeStream m c => m (MaybeTourneyOp)","name":"popCodeStream","module":"Tourney.VM.Compile","link":"Tourney-VM-Compile.html#v:popCodeStream"},{"display_html":"debugExecCompiler :: Tournament t -> Code","name":"debugExecCompiler","module":"Tourney.VM.Compile","link":"Tourney-VM-Compile.html#v:debugExecCompiler"},{"display_html":"compile_ :: Monad m => Tournament t -> Compiler m ()","name":"compile_","module":"Tourney.VM.Compile","link":"Tourney-VM-Compile.html#v:compile_"},{"display_html":"newtypeIStateVar = IStateVar {
","name":"StepContinue Continue NeedResults'Sorting NeedResults'EndRound","module":"Tourney.VM","link":"Tourney-VM.html#t:StepContinue"},{"display_html":"getCodeSoFar :: VM -> IOCode","name":"getCodeSoFar","module":"Tourney.VM","link":"Tourney-VM.html#v:getCodeSoFar"},{"display_html":"getMatches :: VM -> IO (MapByRound (MapByMatches (MaybeResult)))","name":"getMatches","module":"Tourney.VM","link":"Tourney-VM.html#v:getMatches"},{"display_html":"getStandingsHistory :: VM -> IO (MapByRoundStandingsUpdate)","name":"getStandingsHistory","module":"Tourney.VM","link":"Tourney-VM.html#v:getStandingsHistory"},{"display_html":"getPendingMatches :: VM -> IO (VectorMatch)","name":"getPendingMatches","module":"Tourney.VM","link":"Tourney-VM.html#v:getPendingMatches"},{"display_html":"getRoundNo :: VM -> IORoundNo","name":"getRoundNo","module":"Tourney.VM","link":"Tourney-VM.html#v:getRoundNo"},{"display_html":"peekCode :: VM -> IOCode","name":"peekCode","module":"Tourney.VM","link":"Tourney-VM.html#v:peekCode"},{"display_html":"setMatchResult :: VM -> RoundNo -> Match -> Result -> IOBool","name":"setMatchResult","module":"Tourney.VM","link":"Tourney-VM.html#v:setMatchResult"},{"display_html":"getMatch :: VM -> RoundNo -> Match -> IO (Maybe (MaybeResult))","name":"getMatch","module":"Tourney.VM","link":"Tourney-VM.html#v:getMatch"},{"display_html":"typeCode = VectorTourneyOp","name":"Code","module":"Tourney.VM","link":"Tourney-VM.html#t:Code"},{"display_html":"dataTourneyOp
","name":"Mod SetFocus SetOffset","module":"Tourney.Algebra.Unified","link":"Tourney-Algebra-Unified.html#t:Mod"},{"display_html":"(+++) :: Tournament a -> Tournament a -> Tournament a","name":"+++","module":"Tourney.Algebra.Unified","link":"Tourney-Algebra-Unified.html#v:-43--43--43-"},{"display_html":"overlay :: Foldable f => f (Tournament a) -> Tournament a","name":"overlay","module":"Tourney.Algebra.Unified","link":"Tourney-Algebra-Unified.html#v:overlay"},{"display_html":"(***) :: forall a b. (KnownDepth a, KnownDepth b) => Tournament a -> Tournament b -> TournamentTMany","name":"***","module":"Tourney.Algebra.Unified","link":"Tourney-Algebra-Unified.html#v:-42--42--42-"},{"display_html":"sequence :: (Foldable f, KnownDepth a) => f (Tournament a) -> TournamentTMany","name":"sequence","module":"Tourney.Algebra.Unified","link":"Tourney-Algebra-Unified.html#v:sequence"},{"display_html":"dataSortMethod
","name":"Depth TOne TMod TMany","module":"Tourney.Algebra.Unified","link":"Tourney-Algebra-Unified.html#t:Depth"},{"display_html":"classTypeable d => KnownDepth (d :: Depth) where
}","name":"Tourney Tourney $sel:tourneyStream:Tourney $sel:tourneyStreamEnv:Tourney","module":"Tourney.Stream","link":"Tourney-Stream.html#t:Tourney"},{"display_html":"typeTourneyStream m = StreamM m (StreamM m (Compiled (Sorter, StreamM m (CompiledMatch) ())) ()) ()","name":"TourneyStream","module":"Tourney.Stream","link":"Tourney-Stream.html#t:TourneyStream"},{"display_html":"dataCompileError
","name":"CompileError InvalidMatch InvalidFocus $sel:inner:InvalidMatch $sel:outer:InvalidMatch $sel:match:InvalidMatch $sel:focus:InvalidMatch","module":"Tourney.Stream","link":"Tourney-Stream.html#t:CompileError"},{"display_html":"typeCompiled = Either (NonEmptyCompileError)","name":"Compiled","module":"Tourney.Stream","link":"Tourney-Stream.html#t:Compiled"},{"display_html":"createTourney :: forall m a. Monad m => StreamEnv m -> Tournament a -> Tourney m","name":"createTourney","module":"Tourney.Stream","link":"Tourney-Stream.html#v:createTourney"},{"display_html":"runTourney :: Monad m => Tourney m -> TourneyStream m","name":"runTourney","module":"Tourney.Stream","link":"Tourney-Stream.html#v:runTourney"},{"display_html":"newtypeRoundStream m = RoundStream {
}","name":"RoundStream RoundStream $sel:unRoundStream:RoundStream","module":"Tourney.Stream","link":"Tourney-Stream.html#t:RoundStream"},{"display_html":"createRoundStream :: forall m a. Monad m => Tournament a -> RoundStream m","name":"createRoundStream","module":"Tourney.Stream","link":"Tourney-Stream.html#v:createRoundStream"},{"display_html":"newtypeMatchStream m = MatchStream {
}","name":"MatchStream MatchStream $sel:unMatchStream:MatchStream","module":"Tourney.Stream","link":"Tourney-Stream.html#t:MatchStream"},{"display_html":"createMatchStream :: forall m. Monad m => TournamentTOne -> MatchStream m","name":"createMatchStream","module":"Tourney.Stream","link":"Tourney-Stream.html#v:createMatchStream"},{"display_html":"dataInspection t m a = Inspection {
}","name":"Inspection Inspection $sel:playerCount:Inspection $sel:standingsFn:Inspection $sel:query:Inspection","module":"Tourney.Stream","link":"Tourney-Stream.html#t:Inspection"},{"display_html":"dataInspect (t :: Depth) a where
","name":"Inspect ByRound BySorter Flat","module":"Tourney.Stream","link":"Tourney-Stream.html#t:Inspect"},{"display_html":"runInspection :: Monad m => Inspection t m a -> Tournament t -> m a","name":"runInspection","module":"Tourney.Stream","link":"Tourney-Stream.html#v:runInspection"},{"display_html":"pureMatchesByRound :: TournamentTMany -> PlayerCount -> MapByRound (MapByMatches (MaybeResult))","name":"pureMatchesByRound","module":"Tourney.Stream","link":"Tourney-Stream.html#v:pureMatchesByRound"},{"display_html":"dataBuilder t r a","name":"Builder","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#t:Builder"},{"display_html":"classAsSteps a r where
","name":"AsSteps steps","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#t:AsSteps"},{"display_html":"typeSteps = BuilderTMany","name":"Steps","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#t:Steps"},{"display_html":"round_ :: forall a m. (MonadRounds m, AsRound a ()) => a -> m ()","name":"round_","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:round_"},{"display_html":"rounds_ :: AsRound r () => [r] -> Steps s ()","name":"rounds_","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:rounds_"},{"display_html":"asRound :: Round r a -> Round r a","name":"asRound","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:asRound"},{"display_html":"classAsRound a r where
","name":"AsRound toRound","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#t:AsRound"},{"display_html":"typeRound = BuilderTOne","name":"Round","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#t:Round"},{"display_html":"match :: AsMatch m => m -> Round r ()","name":"match","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:match"},{"display_html":"classAsMatch m where
","name":"AsMatch toMatch","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#t:AsMatch"},{"display_html":"list :: Foldable f => f a -> Builder t r a","name":"list","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:list"},{"display_html":"overlaysBy :: (Foldable f, Merge t) => (a -> x) -> f (Builder t x a) -> Builder t r [x]","name":"overlaysBy","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:overlaysBy"},{"display_html":"overlays :: (Foldable f, Merge t) => f (Builder t a a) -> Builder t r [a]","name":"overlays","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:overlays"},{"display_html":"overlays_ :: (Foldable f, Merge t) => f (Builder t a a) -> Builder t r ()","name":"overlays_","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:overlays_"},{"display_html":"getStandings :: Merge t => Builder t () Standings","name":"getStandings","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:getStandings"},{"display_html":"getPlayerCount :: Merge t => Builder t () PlayerCount","name":"getPlayerCount","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:getPlayerCount"},{"display_html":"withFocus :: Merge t => Slot -> Int -> Builder t a a -> Builder ('TMod t) r ()","name":"withFocus","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:withFocus"},{"display_html":"withFocii :: Merge t => (Focus -> [Focus]) -> Builder t a a -> Builder ('TMod t) r ()","name":"withFocii","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:withFocii"},{"display_html":"withOffset :: Merge t => Int -> Builder t a a -> Builder ('TMod t) r ()","name":"withOffset","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:withOffset"},{"display_html":"divideInto :: Int -> Steps () () -> Steps () ()","name":"divideInto","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:divideInto"},{"display_html":"foldAround :: Int -> [Slot] -> [Match]","name":"foldAround","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:foldAround"},{"display_html":"foldAroundMidpoint :: [Slot] -> [Match]","name":"foldAroundMidpoint","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:foldAroundMidpoint"},{"display_html":"swaps :: Merge t => Builder t a a -> Builder t r ()","name":"swaps","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:swaps"},{"display_html":"points :: Merge t => Builder t () () -> Builder t r ()","name":"points","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:points"},{"display_html":"barrier :: Merge t => Builder t () () -> Builder t r ()","name":"barrier","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:barrier"},{"display_html":"inspect :: (Merge t, Merge i) => Inspect i a -> Builder i r r -> Builder t () a","name":"inspect","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:inspect"},{"display_html":"execBuilder :: Merge t => (a -> r) -> Builder t r a -> Tournament t","name":"execBuilder","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:execBuilder"},{"display_html":"execSteps :: (a -> r) -> Steps r a -> TournamentTMany","name":"execSteps","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:execSteps"},{"display_html":"execRound :: (a -> r) -> Round r a -> TournamentTOne","name":"execRound","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:execRound"},{"display_html":"runSteps :: (a -> r) -> Steps r a -> ([r], TournamentTMany)","name":"runSteps","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:runSteps"},{"display_html":"runRound :: (a -> r) -> Round r a -> ([r], TournamentTOne)","name":"runRound","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:runRound"},{"display_html":"getAccum :: Merge t => Builder t r (Tournament t)","name":"getAccum","module":"Tourney.Algebra.Builder","link":"Tourney-Algebra-Builder.html#v:getAccum"},{"display_html":"module Tourney.Algebra.Unified","name":"","module":"Tourney.Algebra","link":""},{"display_html":"module Tourney.Algebra.Builder","name":"","module":"Tourney.Algebra","link":""},{"display_html":"module Tourney.Match","name":"","module":"Tourney.Algebra","link":""},{"display_html":"module Tourney.Common","name":"","module":"Tourney.Algebra","link":""},{"display_html":"singleElimination :: Steps () ()","name":"singleElimination","module":"Tourney.Format.SingleElimination","link":"Tourney-Format-SingleElimination.html#v:singleElimination"},{"display_html":"roundRobin :: Steps () ()","name":"roundRobin","module":"Tourney.Format.RoundRobin","link":"Tourney-Format-RoundRobin.html#v:roundRobin"},{"display_html":"groupRoundRobin :: Int -> Steps () ()","name":"groupRoundRobin","module":"Tourney.Format.RoundRobin","link":"Tourney-Format-RoundRobin.html#v:groupRoundRobin"},{"display_html":"roundRobinEirikAlbrigtsen :: Int -> [[Match]]","name":"roundRobinEirikAlbrigtsen","module":"Tourney.Format.RoundRobin","link":"Tourney-Format-RoundRobin.html#v:roundRobinEirikAlbrigtsen"},{"display_html":"optimalSortingNetwork :: Steps () ()","name":"optimalSortingNetwork","module":"Tourney.Format.OptimalSortingNetwork","link":"Tourney-Format-OptimalSortingNetwork.html#v:optimalSortingNetwork"},{"display_html":"insertionSortNaiive :: Steps () ()","name":"insertionSortNaiive","module":"Tourney.Format.InsertionSort","link":"Tourney-Format-InsertionSort.html#v:insertionSortNaiive"},{"display_html":"insertionSort :: Steps () ()","name":"insertionSort","module":"Tourney.Format.InsertionSort","link":"Tourney-Format-InsertionSort.html#v:insertionSort"},{"display_html":"iCan'tBelieveItCanSort :: Steps () ()","name":"iCan'tBelieveItCanSort","module":"Tourney.Format.ICantBelieveItCanSort","link":"Tourney-Format-ICantBelieveItCanSort.html#v:iCan-39-tBelieveItCanSort"},{"display_html":"doubleElimination :: Steps () ()","name":"doubleElimination","module":"Tourney.Format.DoubleElimination","link":"Tourney-Format-DoubleElimination.html#v:doubleElimination"},{"display_html":"addLosersBracket :: Steps () () -> Steps () ()","name":"addLosersBracket","module":"Tourney.Format.DoubleElimination","link":"Tourney-Format-DoubleElimination.html#v:addLosersBracket"},{"display_html":"linkFun :: Int -> [a] -> [a]","name":"linkFun","module":"Tourney.Format.DoubleElimination","link":"Tourney-Format-DoubleElimination.html#v:linkFun"},{"display_html":"linkFunSwap :: [a] -> [a]","name":"linkFunSwap","module":"Tourney.Format.DoubleElimination","link":"Tourney-Format-DoubleElimination.html#v:linkFunSwap"},{"display_html":"dataSelection","name":"Selection","module":"Tourney.UI.Selection","link":"Tourney-UI-Selection.html#t:Selection"},{"display_html":"new :: MapByRound (MapByMatches (MaybeResult)) -> Selection","name":"new","module":"Tourney.UI.Selection","link":"Tourney-UI-Selection.html#v:new"},{"display_html":"merge :: MapByRound (MapByMatches (MaybeResult)) -> Selection -> Selection","name":"merge","module":"Tourney.UI.Selection","link":"Tourney-UI-Selection.html#v:merge"},{"display_html":"moveRight :: Selection -> Selection","name":"moveRight","module":"Tourney.UI.Selection","link":"Tourney-UI-Selection.html#v:moveRight"},{"display_html":"moveLeft :: Selection -> Selection","name":"moveLeft","module":"Tourney.UI.Selection","link":"Tourney-UI-Selection.html#v:moveLeft"},{"display_html":"current :: Selection -> Maybe (RoundNo, Match)","name":"current","module":"Tourney.UI.Selection","link":"Tourney-UI-Selection.html#v:current"},{"display_html":"dataTourneyOp
","name":"TourneyOp PERFORM_SORTING END_ROUND BEGIN_ROUND MATCH","module":"Tourney.VM.Code","link":"Tourney-VM-Code.html#t:TourneyOp"},{"display_html":"typeCode = VectorTourneyOp","name":"Code","module":"Tourney.VM.Code","link":"Tourney-VM-Code.html#t:Code"},{"display_html":"typeCodeBuilder = BuilderTourneyOp","name":"CodeBuilder","module":"Tourney.VM.Code","link":"Tourney-VM-Code.html#t:CodeBuilder"},{"display_html":"optimiseCodeBuilder :: CodeBuilder -> CodeBuilder","name":"optimiseCodeBuilder","module":"Tourney.VM.Code","link":"Tourney-VM-Code.html#v:optimiseCodeBuilder"},{"display_html":"dataCodeStream m","name":"CodeStream","module":"Tourney.VM.Compile","link":"Tourney-VM-Compile.html#t:CodeStream"},{"display_html":"compile :: Monad m => Tournament t -> StreamEnv m -> CodeStream m","name":"compile","module":"Tourney.VM.Compile","link":"Tourney-VM-Compile.html#v:compile"},{"display_html":"codeSoFar :: CodeStream m -> Code","name":"codeSoFar","module":"Tourney.VM.Compile","link":"Tourney-VM-Compile.html#v:codeSoFar"},{"display_html":"createStreamEnv :: Monad m => PlayerCount -> StreamEnv m","name":"createStreamEnv","module":"Tourney.VM.Compile","link":"Tourney-VM-Compile.html#v:createStreamEnv"},{"display_html":"withGetStandings :: (Focus -> m Standings) -> StreamEnv m -> StreamEnv m","name":"withGetStandings","module":"Tourney.VM.Compile","link":"Tourney-VM-Compile.html#v:withGetStandings"},{"display_html":"debugCodeStream :: MonadCodeStream m c => m Code","name":"debugCodeStream","module":"Tourney.VM.Compile","link":"Tourney-VM-Compile.html#v:debugCodeStream"},{"display_html":"class (Monad m, MonadPrimRealWorld m, Monad c) => MonadCodeStream m c | m -> c where
","name":"MonadCodeStream getCodeStream putCodeStream runCodeStreamEffect","module":"Tourney.VM.Compile","link":"Tourney-VM-Compile.html#t:MonadCodeStream"},{"display_html":"popCodeStream :: MonadCodeStream m c => m (MaybeTourneyOp)","name":"popCodeStream","module":"Tourney.VM.Compile","link":"Tourney-VM-Compile.html#v:popCodeStream"},{"display_html":"debugExecCompiler :: Tournament t -> Code","name":"debugExecCompiler","module":"Tourney.VM.Compile","link":"Tourney-VM-Compile.html#v:debugExecCompiler"},{"display_html":"compile_ :: Monad m => Tournament t -> Compiler m ()","name":"compile_","module":"Tourney.VM.Compile","link":"Tourney-VM-Compile.html#v:compile_"},{"display_html":"newtypeIStateVar = IStateVar {
","name":"StepContinue Continue NeedResults'Sorting NeedResults'EndRound","module":"Tourney.VM","link":"Tourney-VM.html#t:StepContinue"},{"display_html":"getCodeSoFar :: VM -> IOCode","name":"getCodeSoFar","module":"Tourney.VM","link":"Tourney-VM.html#v:getCodeSoFar"},{"display_html":"getMatches :: VM -> IO (MapByRound (MapByMatches (MaybeResult)))","name":"getMatches","module":"Tourney.VM","link":"Tourney-VM.html#v:getMatches"},{"display_html":"getStandingsHistory :: VM -> IO (MapByRoundStandingsUpdate)","name":"getStandingsHistory","module":"Tourney.VM","link":"Tourney-VM.html#v:getStandingsHistory"},{"display_html":"getPendingMatches :: VM -> IO (VectorMatch)","name":"getPendingMatches","module":"Tourney.VM","link":"Tourney-VM.html#v:getPendingMatches"},{"display_html":"getRoundNo :: VM -> IORoundNo","name":"getRoundNo","module":"Tourney.VM","link":"Tourney-VM.html#v:getRoundNo"},{"display_html":"peekCode :: VM -> IOCode","name":"peekCode","module":"Tourney.VM","link":"Tourney-VM.html#v:peekCode"},{"display_html":"setMatchResult :: VM -> RoundNo -> Match -> Result -> IOBool","name":"setMatchResult","module":"Tourney.VM","link":"Tourney-VM.html#v:setMatchResult"},{"display_html":"getMatch :: VM -> RoundNo -> Match -> IO (Maybe (MaybeResult))","name":"getMatch","module":"Tourney.VM","link":"Tourney-VM.html#v:getMatch"},{"display_html":"typeCode = VectorTourneyOp","name":"Code","module":"Tourney.VM","link":"Tourney-VM.html#t:Code"},{"display_html":"dataTourneyOp
}","name":"StandingsUpdate StandingsUpdate $sel:roundNo:StandingsUpdate $sel:standings:StandingsUpdate $sel:roundDepth:StandingsUpdate","module":"Tourney.VM","link":"Tourney-VM.html#t:StandingsUpdate"},{"display_html":"createTourneyUI :: [(Text, TournamentTMany)] -> IO AppState","name":"createTourneyUI","module":"Tourney.UI.Main","link":"Tourney-UI-Main.html#v:createTourneyUI"},{"display_html":"defaultTournaments :: [(Text, TournamentTMany)]","name":"defaultTournaments","module":"Tourney.UI.Main","link":"Tourney-UI-Main.html#v:defaultTournaments"}]
\ No newline at end of file
diff --git a/docs/index.html b/docs/index.html
index b7e14e4..d7b31ff 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -2,7 +2,11 @@
create an easy-to-use eDSL that can be used to create and analyse arbitrary
tournament structures; such as "common" ones like Single or Double
Elimination, or compositions like N groups of Single Elimination.
Your entrypoint to the eDSL should be the Tourney.Algebra module.
Your entrypoint to exploring what's possible with Journeyman should be
-the journeyman-ui executable that comes bundled with this package.
To create a special-purpose tournament VM, for instance, to simulate
+the journeyman-ui executable that comes bundled with this package. It
+uses an extensible tournament UI defined in Tourney.UI.Main, but all
+you as a user needs to do is extend the list of known tournaments you
+pass to createTourneyUI with a tournament you create.
+For an example of how to do this, see the executable in app/Main.hs .
To create a special-purpose tournament VM, for instance, to simulate
a tournament structure under different conditions, see the Tourney.VM
module.
Functions dealing merely with sorting networks or point-award based
sorting networks such as those supported by Journeyman can be found in
diff --git a/src/Tourney/UI/Main.hs b/src/Tourney/UI/Main.hs
index ec0c081..ca33db7 100644
--- a/src/Tourney/UI/Main.hs
+++ b/src/Tourney/UI/Main.hs
@@ -4,7 +4,12 @@
{-# HLINT ignore "Avoid lambda" #-}
-module Tourney.UI.Main (createTourneyUI, defaultTournaments) where
+-- | Use this module to create your own UI that lets you explore tournament
+-- structures defined by the Journeyman eDSL.
+module Tourney.UI.Main (
+ createTourneyUI,
+ defaultTournaments,
+) where
import Brick hiding (Max, Result, zoom)
import Brick qualified
@@ -115,6 +120,7 @@ type UIElement = Reader TournamentState (Widget AppResourceName)
data AppEvent deriving stock (Eq, Show, Ord)
+-- | Given a list of known tournaments, create a tournament UI.
createTourneyUI :: [(Text, Tournament TMany)] -> IO AppState
createTourneyUI knownTournaments =
defaultMain