Commit fa243d21 authored by Alexandre Delanoë's avatar Alexandre Delanoë

Merge remote-tracking branch 'origin/adinapoli/issue-329' into dev

parents fea23acc 3d90bcc8
# Optimising CI speed by using tips from https://blog.nimbleways.com/let-s-make-faster-gitlab-ci-cd-pipelines/
image: adinapoli/gargantext:v3.3
image: adinapoli/gargantext:v3.4
variables:
STACK_ROOT: "${CI_PROJECT_DIR}/.stack-root"
......@@ -37,7 +37,7 @@ cabal:
- .cabal/
policy: pull-push
script:
- nix-shell --run "./bin/update-project-dependencies $CABAL_STORE_DIR && cabal --store-dir=$CABAL_STORE_DIR v2-build --flags test-crypto --ghc-options='-O0 -fclear-plugins'"
- nix-shell --run "./bin/update-project-dependencies $CABAL_STORE_DIR && cabal --store-dir=$CABAL_STORE_DIR v2-build --flags 'test-crypto no-phylo-debug-logs' --ghc-options='-O0 -fclear-plugins'"
allow_failure: false
bench:
......
......@@ -36,8 +36,19 @@ data-files:
test-data/ngrams/simple.json
test-data/ngrams/simple.csv
test-data/phylo/bpa_phylo_test.json
test-data/phylo/open_science.json
test-data/phylo/cleopatre.golden.json
test-data/phylo/nadal.golden.json
test-data/phylo/nadal_docslist.golden.json
test-data/phylo/nadal_ngramslist.golden.json
test-data/phylo/issue-290-small.golden.json
test-data/phylo/open_science.json
test-data/phylo/small-phylo.golden.json
test-data/phylo/small_phylo_docslist.csv
test-data/phylo/small_phylo_ngramslist.csv
test-data/phylo/GarganText_DocsList-nodeId-187481.csv
test-data/phylo/GarganText_NgramsList-nodeId-187482.csv
test-data/phylo/187481.json
test-data/phylo/phylo2dot2json.golden.json
test-data/stemming/lancaster.txt
test-data/test_config.ini
gargantext-cors-settings.toml
......@@ -185,6 +196,7 @@ library
Gargantext.Core.Viz.Phylo
Gargantext.Core.Viz.Phylo.API
Gargantext.Core.Viz.Phylo.API.Tools
Gargantext.Core.Viz.Phylo.Example
Gargantext.Core.Viz.Phylo.PhyloExport
Gargantext.Core.Viz.Phylo.PhyloMaker
Gargantext.Core.Viz.Phylo.PhyloTools
......@@ -350,7 +362,6 @@ library
Gargantext.Core.Viz.Graph.Tools.Infomap
Gargantext.Core.Viz.Graph.Utils
Gargantext.Core.Viz.LegacyPhylo
Gargantext.Core.Viz.Phylo.Example
Gargantext.Core.Viz.Phylo.Legacy.LegacyMain
Gargantext.Core.Viz.Phylo.TemporalMatching
Gargantext.Data.HashMap.Strict.Utils
......@@ -613,6 +624,7 @@ library
, timezone-series ^>= 0.1.13
, transformers ^>= 0.5.6.2
, transformers-base ^>= 0.4.6
, tree-diff
, tomland >= 1.3.3.2
, tuple ^>= 0.3.0.2
, unordered-containers ^>= 0.2.16.0
......@@ -842,6 +854,7 @@ test-suite garg-test-tasty
main-is: drivers/tasty/Main.hs
other-modules:
Test.API.Routes
Common
Test.API.Setup
Test.Core.Similarity
Test.Core.Text
......@@ -877,11 +890,12 @@ test-suite garg-test-tasty
Test.Utils.Jobs
Paths_gargantext
hs-source-dirs:
test
test bin/gargantext-phylo/Phylo
ghc-options: -Wall -threaded -rtsopts -with-rtsopts=-N
build-depends:
QuickCheck ^>= 2.14.2
, aeson ^>= 1.5.6.0
, aeson-pretty ^>= 0.8.9
, aeson-qq
, async ^>= 2.2.4
, boolexpr ^>= 0.2
......@@ -890,6 +904,8 @@ test-suite garg-test-tasty
, conduit ^>= 1.3.4.2
, containers ^>= 0.6.5.1
, crawlerArxiv
, cryptohash
, directory
, duckling ^>= 0.2.0.0
, extra ^>= 1.7.9
, fast-logger ^>= 3.0.5
......@@ -930,6 +946,7 @@ test-suite garg-test-tasty
, servant-server
, shelly >= 1.9 && < 2
, stm ^>= 2.5.0.1
, split
, tasty ^>= 1.4.2.1
, tasty-golden
, tasty-hspec
......
......@@ -14,7 +14,16 @@ rec {
})
else pkgs.haskell.compiler.ghc947;
cabal_install_3_10_1_0 = pkgs.haskell.lib.compose.justStaticExecutables pkgs.haskell.packages.ghc947.cabal-install;
graphviz = pkgs.graphviz.overrideAttrs (finalAttrs: previousAttrs: {
graphviz_dev = pkgs.graphviz.overrideAttrs (finalAttrs: previousAttrs: {
version = "11.0.0~dev";
src = pkgs.fetchFromGitLab {
owner = "graphviz";
repo = "graphviz";
rev = "f3ec849249ef9cb824feb7f97449d7159e1dcb4e"; # head as of 2024-03-25, see gargantext#329
hash = "sha256-s86IqWz6zeKbcRqpV3cVQBVviHbhUSX1U8GVuJBfjC4=";
};
});
graphviz = graphviz_dev.overrideAttrs (finalAttrs: previousAttrs: {
# Increase the YY_BUF_SIZE, see https://gitlab.iscpif.fr/gargantext/haskell-gargantext/issues/290#note_9015
patches = [
(pkgs.fetchpatch {
......
......@@ -19,6 +19,7 @@ Phylomemy was first described in Chavalarias, D., Cointet, J.-P., 2013. Phylomem
.
-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE TemplateHaskell #-}
......@@ -41,6 +42,7 @@ import Gargantext.Core.Utils.Prefix (unPrefix, unPrefixSwagger)
import Gargantext.Prelude
import Test.QuickCheck
import Test.QuickCheck.Instances.Text()
import Data.TreeDiff
------------------------------------------------------------------------
-- | Phylo datatype descriptor of a phylomemy
......@@ -121,7 +123,7 @@ data GraphData =
, _gd_objects :: [ObjectData]
, _gd_strict :: Bool
, _gd_data :: GraphDataData
} deriving (Show, Eq, Generic)
} deriving (Show, Eq, Generic, ToExpr)
data GraphDataData =
GraphDataData {
......@@ -149,7 +151,7 @@ data GraphDataData =
, _gdd_ratio :: Text
, _gdd_splines :: Text
, _gdd_style :: Text
} deriving (Show, Eq, Generic)
} deriving (Show, Eq, Generic, ToExpr)
instance ToJSON GraphDataData where
toJSON GraphDataData{..} = object [
......@@ -214,7 +216,7 @@ data ObjectData =
| BranchToNode !GvId !NodeCommonData !BranchToNodeData
| PeriodToNode !GvId !NodeCommonData !PeriodToNodeData
| Layer !GvId !GraphDataData !LayerData
deriving (Show, Eq, Generic)
deriving (Show, Eq, Generic, ToExpr)
data GroupToNodeData
= GroupToNodeData
......@@ -234,7 +236,7 @@ data GroupToNodeData
, _gtn_support :: Text
, _gtn_to :: Text
, _gtn_weight :: Text
} deriving (Show, Eq, Generic)
} deriving (Show, Eq, Generic, ToExpr)
instance ToJSON GroupToNodeData where
toJSON GroupToNodeData{..} = object [
......@@ -290,7 +292,7 @@ data BranchToNodeData
, _btn_fontsize :: Text
, _btn_size :: Text
, _btn_style :: Text
} deriving (Show, Eq, Generic)
} deriving (Show, Eq, Generic, ToExpr)
instance ToJSON BranchToNodeData where
toJSON BranchToNodeData{..} = object [
......@@ -329,7 +331,7 @@ data PeriodToNodeData
, _ptn_strFrom :: Maybe Text
, _ptn_strTo :: Maybe Text
, _ptn_to :: Text
} deriving (Show, Eq, Generic)
} deriving (Show, Eq, Generic, ToExpr)
instance ToJSON PeriodToNodeData where
toJSON PeriodToNodeData{..} = object [
......@@ -352,7 +354,7 @@ instance FromJSON PeriodToNodeData where
data LayerData
= LayerData {
_ld_nodes :: [Int]
} deriving (Show, Eq, Generic)
} deriving (Show, Eq, Generic, ToExpr)
instance ToJSON LayerData where
toJSON LayerData{..} = object [
......@@ -373,7 +375,7 @@ data NodeCommonData =
, _nd_pos :: !Text
, _nd_shape :: !Text
, _nd_width :: !Text
} deriving (Show, Eq, Generic)
} deriving (Show, Eq, Generic, ToExpr)
instance ToJSON NodeCommonData where
toJSON NodeCommonData{..} = object [
......@@ -404,17 +406,18 @@ data EdgeCommonData =
, _ed_pos :: !Text
, _ed_tail :: !Int
, _ed_width :: !Text
} deriving (Show, Eq, Generic)
} deriving (Show, Eq, Generic, ToExpr)
newtype GvId = GvId { _GvId :: Int }
deriving (Show, Eq, Generic)
deriving stock (Show, Eq, Generic)
deriving anyclass ToExpr
data EdgeData
= GroupToAncestor !GvId !EdgeCommonData !GroupToAncestorData
| GroupToGroup !GvId !EdgeCommonData !GroupToGroupData
| BranchToGroup !GvId !EdgeCommonData !BranchToGroupData
| PeriodToPeriod !GvId !EdgeCommonData
deriving (Show, Eq, Generic)
deriving (Show, Eq, Generic, ToExpr)
data GroupToAncestorData
= GroupToAncestorData
......@@ -422,20 +425,20 @@ data GroupToAncestorData
, _gta_lbl :: !Text
, _gta_penwidth :: !Text
, _gta_style :: !Text
} deriving (Show, Eq, Generic)
} deriving (Show, Eq, Generic, ToExpr)
data GroupToGroupData
= GroupToGroupData
{ _gtg_constraint :: !Text
, _gtg_lbl :: !Text
, _gtg_penwidth :: !Text
} deriving (Show, Eq, Generic)
} deriving (Show, Eq, Generic, ToExpr)
data BranchToGroupData
= BranchToGroupData
{ _btg_arrowhead :: !Text
, _btg_style :: Maybe Text
} deriving (Show, Eq, Generic)
} deriving (Show, Eq, Generic, ToExpr)
-- | JSON instances
instance ToJSON GvId where
......
This diff is collapsed.
......@@ -39,7 +39,6 @@ import Gargantext.Prelude
import Network.HTTP.Media ((//), (/:))
import Prelude qualified
import Servant
import Test.QuickCheck (elements)
import Test.QuickCheck.Arbitrary (Arbitrary, arbitrary)
import Web.HttpApiData (readTextData)
import Gargantext.Database.Query.Table.Node.Error
......@@ -195,10 +194,6 @@ putPhylo = undefined
-- | Instances
-- instance Arbitrary Phylo where arbitrary = elements [phylo]
instance Arbitrary PhyloGroup where arbitrary = elements []
-- instance Arbitrary PhyloView where arbitrary = elements [phyloView]
-- instance Arbitrary PhyloConfig where arbitrary = elements []
instance FromHttpApiData DisplayMode where parseUrlPiece = readTextData
instance FromHttpApiData ExportMode where parseUrlPiece = readTextData
instance FromHttpApiData Filiation where parseUrlPiece = readTextData
......
......@@ -179,7 +179,7 @@ toBid g bs =
exportToDot :: Phylo -> PhyloExport -> DotGraph DotId
exportToDot phylo export =
trace ("\n-- | Convert " <> show(length $ export ^. export_branches) <> " branches and "
tracePhylo ("\n-- | Convert " <> show(length $ export ^. export_branches) <> " branches and "
<> show(length $ export ^. export_groups) <> " groups "
<> show(length $ nub $ concat $ map (^. phylo_groupNgrams) $ export ^. export_groups)
<> " terms to a dot file\n\n"
......
......@@ -192,7 +192,7 @@ findSeaLadder phylo = case getSeaElevation phylo of
appendGroups :: (a -> Period -> (Text,Text) -> Scale -> Int -> [Cooc] -> Map Int Double -> PhyloGroup) -> Scale -> Map (Date,Date) [a] -> Phylo -> Phylo
appendGroups f lvl m phylo =
trace ("\n" <> "-- | Append "
tracePhylo ("\n" <> "-- | Append "
<> show (length $ concat $ elems m)
<> " groups to scale "
<> show (lvl) <> "\n" :: Text)
......@@ -241,10 +241,10 @@ clusterToGroup fis pId pId' lvl idx coocs rootsCount = PhyloGroup pId pId' lvl i
indexDates' :: Map (Date,Date) [Document] -> Map (Date,Date) (Text,Text)
indexDates' m = map (\docs ->
let ds = map (\d -> date' d) docs
f = if (null ds)
f = if (null ds || all T.null ds)
then ""
else toFstDate ds
l = if (null ds)
l = if (null ds || all T.null ds)
then ""
else toLstDate ds
in (f,l)) m
......@@ -381,7 +381,7 @@ docsToTimeScaleCooc docs fdt =
mCooc' = fromList
$ map (\t -> (t,empty))
$ toTimeScale (map date docs) 1
in trace ("\n" <> "-- | Build the coocurency matrix for "
in tracePhylo ("\n" <> "-- | Build the coocurency matrix for "
<> show (length $ keys mCooc')
<> " unit of time" <> "\n" :: Text)
$ unionWith sumCooc mCooc mCooc'
......@@ -407,7 +407,7 @@ groupDocsByPeriod' :: (NFData doc, Ord date, Enum date) => (doc -> date) -> [(da
groupDocsByPeriod' f pds docs =
let docs' = groupBy (\d d' -> f d == f d') $ sortOn f docs
periods = parMap rpar (inPeriode f docs') pds
in trace ("\n" <> "-- | Group "
in tracePhylo ("\n" <> "-- | Group "
<> show(length docs)
<> " docs by "
<> show(length pds) <> " periods" <> "\n" :: Text)
......@@ -426,7 +426,7 @@ groupDocsByPeriod _ _ [] = panic "[ERR][Viz.Phylo.PhyloMaker] Empty [Documents
groupDocsByPeriod f pds es =
let periods = parMap rpar (inPeriode f es) pds
in trace ("\n" <> "-- | Group "
in tracePhylo ("\n" <> "-- | Group "
<> show(length es) <> " docs by "
<> show(length pds) <> " periods" <> "\n" :: Text)
$ fromList $ zip pds periods
......@@ -483,7 +483,7 @@ docsToTimeScaleNb :: [Document] -> Map Date Double
docsToTimeScaleNb docs =
let docs' = fromListWith (+) $ map (\d -> (date d,1)) docs
time = fromList $ map (\t -> (t,0)) $ toTimeScale (keys docs') 1
in trace ("\n" <> "-- | Group "
in tracePhylo ("\n" <> "-- | Group "
<> show(length docs)
<> " docs by "
<> show(length time)
......@@ -539,9 +539,9 @@ initPhylo docs conf =
then defaultPhyloParam { _phyloParam_config = setDefault conf timeScale (length docs) }
else defaultPhyloParam { _phyloParam_config = conf }
periods = toPeriods (D.sort $ D.nub $ map date docs) (getTimePeriod timeScale) (getTimeStep timeScale)
in trace ("\n" <> "-- | Init a phylo out of "
in tracePhylo ("\n" <> "-- | Init a phylo out of "
<> show(length docs) <> " docs \n" :: Text)
$ trace ("\n" <> "-- | lambda "
$ tracePhylo ("\n" <> "-- | lambda "
<> show(_qua_granularity $ phyloQuality $ _phyloParam_config params) :: Text)
$ Phylo foundations
docsSources
......
......@@ -30,7 +30,6 @@ import Data.Vector (Vector, elemIndex)
import Data.Vector qualified as Vector
import Gargantext.Core.Viz.Phylo
import Gargantext.Prelude hiding (empty)
import Prelude (read)
import Text.Printf
------------
......@@ -160,7 +159,7 @@ toFstDate ds = snd
$ head' "firstDate"
$ sortOn fst
$ map (\d ->
let d' = read (filter (\c -> notElem c ['U','T','C',' ',':','-']) $ unpack d)::Int
let d' = fromMaybe (error "toFstDate") $ readMaybe (filter (\c -> notElem c ['U','T','C',' ',':','-']) $ unpack d)::Int
in (d',d)) ds
toLstDate :: [Text] -> Text
......@@ -169,7 +168,7 @@ toLstDate ds = snd
$ reverse
$ sortOn fst
$ map (\d ->
let d' = read (filter (\c -> notElem c ['U','T','C',' ',':','-']) $ unpack d)::Int
let d' = fromMaybe (error "toLstDate") $ readMaybe (filter (\c -> notElem c ['U','T','C',' ',':','-']) $ unpack d)::Int
in (d',d)) ds
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
status label forms
candidate %
candidate -
map accompagnement
map activités
map adaptation
map addiction
map addictions conduites addictives
map adolescence
map adolescent
map adolescent girls
map adolescent outcomes
map adolescent substance use
map adolescents adolescence|&|adolescent|&|adolescent girls|&|adolescent outcomes|&|adolescent substance use|&|nombreux adolescents|&|teenagers|&|young adolescents
map aide
map alcool
candidate an
candidate analyse
map analyse qualitative
candidate année
candidate années année
map anorexie mentale
candidate ans an
map anxiogène
map anxiété
stop apparition
candidate apprentissage
map approche intégrative
map approche systémique
stop approches
candidate article
candidate articulation
candidate association
map atmosphère familiale
candidate attentes
stop attention
candidate auteurs
map autonome autonomie
map autonomie
map autorité
stop autre part
candidate base
candidate bases
map belle émotion
candidate besoin
candidate biais
stop but
map bébé
candidate cadre
map cahier
candidate caractéristiques
stop carte
candidate cas
map cas cliniques
candidate centaine
candidate centre
map changement
candidate charge
map charge familiale
map charge individuelle
candidate chercheurs
candidate choix
candidate cliniciens
map clinique
map communication
candidate complexité
candidate complément
candidate comportement
candidate compréhension
candidate compte
candidate concept
stop conclusion
stop conditions
map conduites addictives addiction|&|transaction addictive
map conférence
candidate considération
map constellations familiales
stop construction
map consultation
candidate contexte
candidate contextes
candidate continuité
map coopération
map couple couples
map couples
candidate cours
map crise existentielle
candidate croyances
candidate culture
map cycle
map demande
stop demi
candidate dernières années
map dialogue
candidate difficultés
candidate différences
candidate différentes modalités
stop discours
stop discussion discussions
stop discussions discours
candidate dispositif
candidate diversité
map données
map dynamique familiale
map découvrir ensemble
map déficience intellectuelle
map dépressif
map dépression dépressif
map détresse
candidate développement
candidate effet
stop effets
map efficacité
map emdr
map emplois
map enfants porteurs
candidate engagement
candidate ensemble
map entreprise
map entreprises entreprise
map entretiens
candidate entrée
candidate espace
map estime de soi
stop evaluation
stop exemple
stop existence
candidate expert
stop expression
map expérience
candidate extraits
candidate facteur
candidate fait
map familiale
map familiarité
map famille atmosphère familiale|&|familiale|&|familles|&|familles recomposées
map familles
map familles recomposées
candidate family
map fille
map fièvre
candidate fonction
map fonctionnement
candidate forme
map fossé
map fratries
map frustration
map frère frères
map frères
map groupe groupes
map groupe familial
map groupes
candidate guerres
map histoire
map hypothèse
candidate hypothèses
map identification
map illustration clinique
stop impact
stop implication
candidate importance
candidate incidence
candidate individu
candidate information
candidate institutionnalisation
candidate interaction
candidate interactionnelles
map interactions familiales
map interactions négatives
map interactions précoces
map intervention interventions
map interventions
candidate introduction
candidate intérêt
candidate issue
map jalouse
map jalousie jalouse|&|jaloux
map jaloux
map jeu jeux|&|jouer
map jeune enfant
candidate jeunes
map jeunes adultes
map jeux
map jouer
map journal
candidate langage
map langue
candidate lettre
stop lettres
map lettré lettrée
map lettrée
candidate lien
stop liens
candidate lieu
candidate lieux
map littéraire
map littérature cahier|&|littéraire|&|roman|&|romancier|&|romans|&|écriture
candidate l’émouvait
map malade
map maladie fièvre|&|malade
map maman
candidate maîtresse
map meilleure acceptation
map meilleure coopération
map membres
map mentalisation
map mineurs
candidate ministère
candidate mise
candidate modalités
candidate modèle
candidate modérateurs
candidate mois
candidate moitié
candidate monde
candidate murmure
map mutations psychosociétales
map mère maman
map médiateur médiateurs|&|médiation
map médiateurs
map médiation
map médication
map méthode méthodes
map méthodes
map métiers ouvriers
map nombreux adolescents
map nouvelles stratégies
map nouvelles technologies
candidate nécessité
candidate objectif
map objectifs
map objet
candidate objets
candidate organisation
candidate origine
candidate outils
map ouvriers
map paradigme
candidate parallèle
map parentalité
map parents père
candidate parole
candidate part
candidate participants
candidate partie
candidate passage
map pathologie pathologies
map pathologies
map patient
stop patients
candidate perception
stop personne
stop perspective
map petite enfance
map phénomène
candidate pistes
candidate place
map population
map population française
candidate possibilité
map pratique pratiques
map pratiques
map pratiques cliniques
candidate première partie
stop prise
candidate problème
candidate problèmes
candidate processus
map processus thérapeutiques
map processus émotionnels
candidate proches
candidate professionnel
map professionnels
candidate programme
stop propos
map propres stratégies
map protection judiciaire
candidate présence
stop présentation
map prévention
map psychanalyste
map psychiatre psychiatrie
map psychiatrie
map psychologues
map psychométriques
map psychose
map psychosociale
map psychothérapie
map psychothérapie familiale
map père
map pédopsychiatrie
stop période
map qualité
map qualité de vie
map question
candidate questionnaire
map questions question
map quête de sens
stop rapport
map recherche
candidate recherches
candidate reconnaissance
map recrutement recruter
map recruter
map relation fraternelle
map relation thérapeutique
candidate rencontre
map rendre compte
candidate renforcement
map revue
candidate risque
map roman
map romancier
map romans
candidate réflexions
candidate régulation
map régulation émotionnelle
candidate répercussions
candidate réponse
candidate réponses
candidate réseau
map résultats
map rétroaction
map santé
map santé mentale
map santé publique
map schizophrenia
map schizophrenie
map schizophrénie schizophrenia|&|schizophrenie
candidate scène
map sein
map sens
candidate service
candidate situation
candidate situations
map situations cliniques
map sociologie
map soins
candidate solution
map soutien
candidate spécificités
map stratégie stratégies
map stratégies
map stress
map subjectivation
candidate sujet
candidate sujets
map symptôme
candidate système
map système familial
candidate systèmes
map séance
map séances séance
map sœur sœurs
map sœurs
map teenagers
stop terme
stop termes terme
map thérapeute
candidate thérapeutes
map thérapeutes familiaux
map thérapie thérapies
map thérapie familiale thérapies familiales
map thérapie familiale psychanalytique
map thérapie familiale systémique thérapie systémique|&|thérapies systémiques
map thérapie individuelle
map thérapie systémique
map thérapies
map thérapies familiales
map thérapies systémiques
candidate traduction
candidate traitement
map traitement pharmacologique
candidate traitements
map transaction addictive
map transgénérationnel
candidate transmission
map transmission intergénérationnelle
map trauma trauma history|&|trauma studies|&|traumatisme
map trauma history
map trauma studies
map traumatisme
candidate travail
map travaux
candidate travers
map trouble troubles
map trouble développemental
map troubles
candidate type
candidate uns
stop utilisation
map victime
map vie
map vie familiale
candidate voix murmure
candidate vue
map vécu
map young adolescents
candidate zone
map échanges
candidate école maîtresse|&|éducation|&|élèves
map écriture journal|&|lettre|&|lettres|&|lettré|&|lettrée|&|écrivaine
map écrivaine
candidate éducation
map éducation thérapeutique
candidate élaboration
map élaboration mentale
candidate élèves
candidate émergence
map émotion l’émouvait
map émotions belle émotion|&|émotion
candidate épreuve
candidate étapes
candidate état
candidate étude
map évaluation
candidate évidence
stop évolution
candidate œuvre
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -20,7 +20,6 @@ import Control.Concurrent
import Control.Concurrent.Async
import Control.Concurrent.Async qualified as Async
import Control.Concurrent.STM
import Data.List (isInfixOf)
import Data.Sequence ((|>), fromList)
import Data.Time
import Debug.RecoverRTTI (anythingToString)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment