]> Git — Sourcephile - julm/worksheets.git/commitdiff
wip main
authorJulien Moutinho <julm+worksheets@sourcephile.fr>
Fri, 16 Jan 2026 16:29:41 +0000 (17:29 +0100)
committerJulien Moutinho <julm+worksheets@sourcephile.fr>
Fri, 16 Jan 2026 16:29:56 +0000 (17:29 +0100)
src/Rosetta/Matching.hs
worksheets.cabal

index 33030ad730a62869a27c95bf6fd63b1c6c3c045f..e15a7a131c42c6ca40636cfd8e3f8b8a12d3b663 100644 (file)
@@ -10,6 +10,8 @@ import Data.Map.Strict qualified as Map
 
 -- import Data.Set qualified as Set
 import Data.Text qualified as Text
+import System.Random qualified as Random
+import System.Random.Shuffle as Random
 
 -- import Data.Text.Short qualified as ShortText
 import System.FilePath.Posix ((</>))
@@ -144,9 +146,23 @@ data Dicts = Dicts
   }
 
 pagesHTML :: Dicts -> Text -> Pages -> IO Builder
-pagesHTML Dicts{..} title Pages{..} = do
+pagesHTML Dicts{..} title pages = do
   -- FIXME: this absolute path is not portable out of my system
   dataPath <- Self.getDataDir <&> File.normalise
+  randomGen <- Random.getStdGen
+  pagesListShuffled :: [Page] <-
+    (mconcat <$>) $
+      forM (pages & pagesList) \page -> do
+        forM (page & pageMatches & chunksOf (page & pageMatchesNum)) \matches -> do
+          pageMatches <- Random.shuffleM matches
+          return page{pageMatches} -- Random.shuffleM
+          -- Random.shuffleM
+          -- forM_ (pageMatch & ol0) \(matchIdx :: Int, match) -> do
+          -- forM_ (match & matchMatters & ol1) \(matterIdx :: Natural, matter) -> do
+          -- Random.shuffleM
+          -- let n = page & pageMatchesNum & fromIntegral
+          -- in let (q, r) = page & pageMatches & List.length & (div n)
+          --    in List.unfoldr _ (List.replicate q n <> [r])
   return $ Blaze.renderMarkupBuilder do
     HTML.docTypeHtml do
       HTML.head do
@@ -164,9 +180,9 @@ pagesHTML Dicts{..} title Pages{..} = do
               ! HA.type_ "text/css"
               ! HA.href (dataPath </> cssFile & toValue)
         -- styleCSS $ cssPrintPage pageOrientation pageSize
-        HTML.styleCSS $ pagesDifficulties & difficultyCSS
+        HTML.styleCSS $ pages & pagesDifficulties & difficultyCSS
       HTML.body do
-        forM_ pagesList \page -> do
+        forM_ (pages & pagesList) \page -> do
           "\n"
           forM_ (page & pageMatches & chunksOf (page & pageMatchesNum)) \pageMatch -> do
             HTML.section
index 521600715e164fc4d5b0960425156ee902969cab..fb58500e3c83ae8a7028a4fd78f587982564fb64 100644 (file)
@@ -97,6 +97,7 @@ common library-deps
     , pretty-simple
     , radix-tree
     , random
+    , random-shuffle
     , safe-decimal
     , scientific
     , split