Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
haskell-gargantext
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
200
Issues
200
List
Board
Labels
Milestones
Merge Requests
12
Merge Requests
12
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
gargantext
haskell-gargantext
Commits
28993230
Commit
28993230
authored
Jul 15, 2020
by
Alexandre Delanoë
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[REFACT] Hyperdatas easy polymorphic insert (WIP)
parent
0e6d71de
Pipeline
#952
failed with stage
Changes
6
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
171 additions
and
103 deletions
+171
-103
Flow.hs
src/Gargantext/Database/Action/Flow.hs
+5
-5
Node.hs
src/Gargantext/Database/Action/Node.hs
+6
-2
Default.hs
src/Gargantext/Database/Admin/Types/Hyperdata/Default.hs
+114
-0
Node.hs
src/Gargantext/Database/Admin/Types/Node.hs
+28
-0
Node.hs
src/Gargantext/Database/Query/Table/Node.hs
+17
-95
Root.hs
src/Gargantext/Database/Query/Tree/Root.hs
+1
-1
No files found.
src/Gargantext/Database/Action/Flow.hs
View file @
28993230
...
...
@@ -202,11 +202,11 @@ flowCorpusUser l user corpusName ctype ids = do
-- User Flow
(
userId
,
_rootId
,
userCorpusId
)
<-
getOrMk_RootWithCorpus
user
corpusName
ctype
listId
<-
getOrMkList
userCorpusId
userId
_cooc
<-
mk
Node
NodeListCooc
listId
userId
_cooc
<-
insertDefault
Node
NodeListCooc
listId
userId
-- TODO: check if present already, ignore
_
<-
Doc
.
add
userCorpusId
ids
_tId
<-
mk
Node
NodeTexts
userCorpusId
userId
_tId
<-
insertDefault
Node
NodeTexts
userCorpusId
userId
-- printDebug "Node Text Id" tId
-- User List Flow
...
...
@@ -217,8 +217,8 @@ flowCorpusUser l user corpusName ctype ids = do
-- _ <- insertOccsUpdates userCorpusId mastListId
-- printDebug "userListId" userListId
-- User Graph Flow
_
<-
mk
Dashboard
userCorpusId
userId
_
<-
mkGraph
userCorpusId
userId
_
<-
insertDefaultNode
Node
Dashboard
userCorpusId
userId
_
<-
insertDefaultNode
NodeGraph
userCorpusId
userId
--
_
<-
mkPhylo
userCorpusId
userId
-- Annuaire Flow
...
...
@@ -272,7 +272,7 @@ insertMasterDocs c lang hs = do
]
_
<-
Doc
.
add
masterCorpusId
ids'
_cooc
<-
mk
Node
NodeListCooc
lId
masterUserId
_cooc
<-
insertDefault
Node
NodeListCooc
lId
masterUserId
-- to be removed
_
<-
insertDocNgrams
lId
indexedNgrams
...
...
src/Gargantext/Database/Action/Node.hs
View file @
28993230
...
...
@@ -133,14 +133,18 @@ mkNodeWithParent_ConfigureHyperdata' :: (HasNodeError err)
->
Name
->
Cmd
err
[
NodeId
]
mkNodeWithParent_ConfigureHyperdata'
nt
(
Just
i
)
uId
name
=
do
maybeNodeId
<-
insertNodesWithParentR
(
Just
i
)
[
node
nt
name
defaultFolder
Nothing
uId
]
maybeNodeId
<-
case
nt
of
NodeFrameWrite
->
insertNode
NodeFrameWrite
(
Just
name
)
Nothing
i
uId
NodeFrameCalc
->
insertNode
NodeFrameCalc
(
Just
name
)
Nothing
i
uId
_
->
nodeError
NeedsConfiguration
case
maybeNodeId
of
[]
->
nodeError
(
DoesNotExist
i
)
[
n
]
->
do
config
<-
view
hasConfig
u
<-
case
nt
of
NodeFrameWrite
->
pure
$
_gc_frame_write_url
config
NodeFrameCalc
->
pure
$
_gc_frame_calc_url
config
NodeFrameCalc
->
pure
$
_gc_frame_calc_url
config
_
->
nodeError
NeedsConfiguration
let
s
=
_gc_secretkey
config
...
...
src/Gargantext/Database/Admin/Types/Hyperdata/Default.hs
0 → 100644
View file @
28993230
{-|
Module : Gargantext.Database.Admin.Types.Hyperdata.Default
Description :
Copyright : (c) CNRS, 2017-Present
License : AGPL + CECILL v3
Maintainer : team@gargantext.org
Stability : experimental
Portability : POSIX
-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE TemplateHaskell #-}
module
Gargantext.Database.Admin.Types.Hyperdata.Default
where
import
Gargantext.Database.Admin.Types.Node
(
NodeType
(
..
))
import
Gargantext.Database.Admin.Types.Hyperdata
import
Gargantext.Database.Admin.Types.Hyperdata.Prelude
data
DefaultHyperdata
=
DefaultUser
HyperdataUser
|
DefaultContact
HyperdataContact
|
DefaultCorpus
HyperdataCorpus
|
DefaultCorpusV3
HyperdataCorpus
|
DefaultAnnuaire
HyperdataAnnuaire
|
DefaultDocument
HyperdataDocument
|
DefaultTexts
HyperdataTexts
|
DefaultList
HyperdataList
|
DefaultListCooc
HyperdataListCooc
|
DefaultModel
HyperdataModel
|
DefaultFolder
HyperdataFolder
|
DefaultFolderPrivate
HyperdataFolderPrivate
|
DefaultFolderShared
HyperdataFolderShared
|
DefaultTeam
HyperdataFolder
|
DefaultFolderPublic
HyperdataFolderPublic
|
DefaultGraph
HyperdataGraph
|
DefaultPhylo
HyperdataPhylo
|
DefaultDashboard
HyperdataDashboard
|
DefaultFrameWrite
HyperdataFrame
|
DefaultFrameCalc
HyperdataFrame
instance
Hyperdata
DefaultHyperdata
instance
ToJSON
DefaultHyperdata
where
toJSON
(
DefaultUser
x
)
=
toJSON
x
toJSON
(
DefaultContact
x
)
=
toJSON
x
toJSON
(
DefaultCorpus
x
)
=
toJSON
x
toJSON
(
DefaultCorpusV3
x
)
=
toJSON
x
toJSON
(
DefaultAnnuaire
x
)
=
toJSON
x
toJSON
(
DefaultDocument
x
)
=
toJSON
x
toJSON
(
DefaultTexts
x
)
=
toJSON
x
toJSON
(
DefaultList
x
)
=
toJSON
x
toJSON
(
DefaultListCooc
x
)
=
toJSON
x
toJSON
(
DefaultModel
x
)
=
toJSON
x
toJSON
(
DefaultFolder
x
)
=
toJSON
x
toJSON
(
DefaultFolderPrivate
x
)
=
toJSON
x
toJSON
(
DefaultFolderShared
x
)
=
toJSON
x
toJSON
(
DefaultTeam
x
)
=
toJSON
x
toJSON
(
DefaultFolderPublic
x
)
=
toJSON
x
toJSON
(
DefaultGraph
x
)
=
toJSON
x
toJSON
(
DefaultPhylo
x
)
=
toJSON
x
toJSON
(
DefaultDashboard
x
)
=
toJSON
x
toJSON
(
DefaultFrameWrite
x
)
=
toJSON
x
toJSON
(
DefaultFrameCalc
x
)
=
toJSON
x
defaultHyperdata
::
NodeType
->
DefaultHyperdata
defaultHyperdata
NodeUser
=
DefaultUser
defaultHyperdataUser
defaultHyperdata
NodeContact
=
DefaultContact
defaultHyperdataContact
defaultHyperdata
NodeCorpus
=
DefaultCorpus
defaultHyperdataCorpus
defaultHyperdata
NodeCorpusV3
=
DefaultCorpusV3
defaultHyperdataCorpus
defaultHyperdata
NodeAnnuaire
=
DefaultAnnuaire
defaultHyperdataAnnuaire
defaultHyperdata
NodeDocument
=
DefaultDocument
defaultHyperdataDocument
defaultHyperdata
NodeTexts
=
DefaultTexts
defaultHyperdataTexts
defaultHyperdata
NodeList
=
DefaultList
defaultHyperdataList
defaultHyperdata
NodeListCooc
=
DefaultListCooc
defaultHyperdataListCooc
defaultHyperdata
NodeModel
=
DefaultModel
defaultHyperdataModel
defaultHyperdata
NodeFolder
=
DefaultFolder
defaultHyperdataFolder
defaultHyperdata
NodeFolderPrivate
=
DefaultFolderPrivate
defaultHyperdataFolderPrivate
defaultHyperdata
NodeFolderShared
=
DefaultFolderShared
defaultHyperdataFolderShared
defaultHyperdata
NodeTeam
=
DefaultTeam
defaultHyperdataFolder
defaultHyperdata
NodeFolderPublic
=
DefaultFolderPublic
defaultHyperdataFolderPublic
defaultHyperdata
NodeGraph
=
DefaultGraph
defaultHyperdataGraph
defaultHyperdata
NodePhylo
=
DefaultPhylo
defaultHyperdataPhylo
defaultHyperdata
NodeDashboard
=
DefaultDashboard
defaultHyperdataDashboard
defaultHyperdata
NodeFrameWrite
=
DefaultFrameWrite
defaultHyperdataFrame
defaultHyperdata
NodeFrameCalc
=
DefaultFrameCalc
defaultHyperdataFrame
src/Gargantext/Database/Admin/Types/Node.hs
View file @
28993230
...
...
@@ -263,6 +263,34 @@ data NodeType = NodeUser
allNodeTypes
::
[
NodeType
]
allNodeTypes
=
[
minBound
..
]
defaultName
::
NodeType
->
Text
defaultName
NodeUser
=
"User"
defaultName
NodeContact
=
"Contact"
defaultName
NodeCorpus
=
"Corpus"
defaultName
NodeCorpusV3
=
"Corpus"
defaultName
NodeAnnuaire
=
"Annuaire"
defaultName
NodeDocument
=
"Doc"
defaultName
NodeTexts
=
"Texts"
defaultName
NodeList
=
"List"
defaultName
NodeListCooc
=
"List"
defaultName
NodeModel
=
"Model"
defaultName
NodeFolder
=
"Folder"
defaultName
NodeFolderPrivate
=
"Private Folder"
defaultName
NodeFolderShared
=
"Shared Folder"
defaultName
NodeTeam
=
"Folder"
defaultName
NodeFolderPublic
=
"Public Folder"
defaultName
NodeGraph
=
"Graph"
defaultName
NodePhylo
=
"Phylo"
defaultName
NodeDashboard
=
"Dashboard"
defaultName
NodeFrameWrite
=
"Frame Write"
defaultName
NodeFrameCalc
=
"Frame Calc"
instance
FromJSON
NodeType
instance
ToJSON
NodeType
...
...
src/Gargantext/Database/Query/Table/Node.hs
View file @
28993230
...
...
@@ -24,19 +24,19 @@ module Gargantext.Database.Query.Table.Node
import
Control.Arrow
(
returnA
)
import
Control.Lens
(
set
,
view
)
import
Data.Aeson
import
Data.Maybe
(
Maybe
(
..
))
import
Data.Maybe
(
Maybe
(
..
)
,
fromMaybe
,
maybe
)
import
Data.Text
(
Text
)
import
GHC.Int
(
Int64
)
import
Gargantext.Core.Types
import
Gargantext.Database.Admin.Config
(
nodeTypeId
)
import
Gargantext.Database.Admin.Types.Hyperdata
import
Gargantext.Database.Admin.Types.Node
(
NodeType
(
..
))
import
Gargantext.Database.Admin.Types.Hyperdata.Default
import
Gargantext.Database.Admin.Types.Node
(
NodeType
(
..
),
defaultName
)
import
Gargantext.Database.Prelude
import
Gargantext.Database.Query.Filter
(
limit'
,
offset'
)
import
Gargantext.Database.Query.Table.Node.Error
import
Gargantext.Database.Schema.Node
import
Gargantext.Prelude
hiding
(
sum
,
head
)
import
Gargantext.Viz.Graph
(
HyperdataGraph
(
..
),
defaultHyperdataGraph
)
import
Opaleye
hiding
(
FromField
)
import
Opaleye.Internal.QueryArr
(
Query
)
import
Prelude
hiding
(
null
,
id
,
map
,
sum
)
...
...
@@ -162,16 +162,6 @@ nodeContactW maybeName maybeContact aId =
name
=
maybe
"Contact"
identity
maybeName
contact
=
maybe
arbitraryHyperdataContact
identity
maybeContact
------------------------------------------------------------------------
defaultFolder
::
HyperdataFolder
defaultFolder
=
defaultHyperdataFolder
nodeFolderW
::
Maybe
Name
->
Maybe
HyperdataCorpus
->
ParentId
->
UserId
->
NodeWrite
nodeFolderW
maybeName
maybeFolder
pid
=
node
NodeFolder
name
folder
(
Just
pid
)
where
name
=
maybe
"Folder"
identity
maybeName
folder
=
maybe
defaultFolder
identity
maybeFolder
------------------------------------------------------------------------
nodeCorpusW
::
Maybe
Name
->
Maybe
HyperdataCorpus
->
ParentId
->
UserId
->
NodeWrite
nodeCorpusW
maybeName
maybeCorpus
pId
=
node
NodeCorpus
name
corpus
(
Just
pId
)
where
...
...
@@ -185,65 +175,19 @@ nodeDocumentW maybeName maybeDocument cId = node NodeDocument name doc (Just cId
name
=
maybe
"Document"
identity
maybeName
doc
=
maybe
defaultHyperdataDocument
identity
maybeDocument
------------------------------------------------------------------------
nodeAnnuaireW
::
Maybe
Name
->
Maybe
HyperdataAnnuaire
->
ParentId
->
UserId
->
NodeWrite
nodeAnnuaireW
maybeName
maybeAnnuaire
pId
=
node
NodeAnnuaire
name
annuaire
(
Just
pId
)
where
name
=
maybe
"Annuaire"
identity
maybeName
annuaire
=
maybe
defaultHyperdataAnnuaire
identity
maybeAnnuaire
-- | Sugar to insert Node with NodeType in Database
insertDefaultNode
::
NodeType
->
ParentId
->
UserId
->
Cmd
err
[
NodeId
]
insertDefaultNode
nt
p
u
=
insertNode
nt
Nothing
Nothing
p
u
------------------------------------------------------------------------
mkModelNode
::
HasNodeError
err
=>
ParentId
->
UserId
->
Cmd
err
[
NodeId
]
mkModelNode
p
u
=
insertNodesR
[
nodeModelW
Nothing
Nothing
p
u
]
insertNode
::
NodeType
->
Maybe
Name
->
Maybe
DefaultHyperdata
->
ParentId
->
UserId
->
Cmd
err
[
NodeId
]
insertNode
nt
n
h
p
u
=
insertNodesR
[
nodeW
nt
n
h
p
u
]
node
ModelW
::
Maybe
Name
->
Maybe
HyperdataModel
->
ParentId
->
UserId
->
NodeWrite
node
ModelW
maybeName
maybeModel
pId
=
node
NodeModel
name
list
(
Just
pId
)
node
W
::
NodeType
->
Maybe
Name
->
Maybe
DefaultHyperdata
->
ParentId
->
UserId
->
NodeWrite
node
W
nt
n
h
p
u
=
node
nt
n'
h'
(
Just
p
)
u
where
name
=
maybe
"List Model"
identity
maybeName
list
=
maybe
defaultHyperdataModel
identity
maybeModel
------------------------------------------------------------------------
nodeGraphW
::
Maybe
Name
->
Maybe
HyperdataGraph
->
ParentId
->
UserId
->
NodeWrite
nodeGraphW
maybeName
maybeGraph
pId
=
node
NodeGraph
name
graph
(
Just
pId
)
where
name
=
maybe
"Graph"
identity
maybeName
graph
=
maybe
defaultHyperdataGraph
identity
maybeGraph
mkGraph
::
ParentId
->
UserId
->
Cmd
err
[
GraphId
]
mkGraph
p
u
=
insertNodesR
[
nodeGraphW
Nothing
Nothing
p
u
]
insertGraph
::
ParentId
->
UserId
->
HyperdataGraph
->
Cmd
err
[
GraphId
]
insertGraph
p
u
h
=
insertNodesR
[
nodeGraphW
Nothing
(
Just
h
)
p
u
]
n'
=
fromMaybe
(
defaultName
nt
)
n
h'
=
maybe
(
defaultHyperdata
nt
)
identity
h
------------------------------------------------------------------------
nodeDefault
::
NodeType
->
ParentId
->
UserId
->
NodeWrite
nodeDefault
NodeUser
parentId
=
node
NodeUser
"User"
defaultHyperdataUser
(
Just
parentId
)
nodeDefault
NodeContact
parentId
=
node
NodeContact
"Contact"
defaultHyperdataContact
(
Just
parentId
)
nodeDefault
NodeCorpus
parentId
=
node
NodeCorpus
"Corpus"
defaultHyperdataCorpus
(
Just
parentId
)
nodeDefault
NodeCorpusV3
parentId
=
node
NodeCorpus
"Corpus"
defaultHyperdataCorpus
(
Just
parentId
)
nodeDefault
NodeAnnuaire
parentId
=
node
NodeAnnuaire
"Annuaire"
defaultHyperdataAnnuaire
(
Just
parentId
)
nodeDefault
NodeDocument
parentId
=
node
NodeDocument
"Doc"
defaultHyperdataDocument
(
Just
parentId
)
nodeDefault
NodeTexts
parentId
=
node
NodeTexts
"Texts"
defaultHyperdataTexts
(
Just
parentId
)
nodeDefault
NodeList
parentId
=
node
NodeList
"List"
defaultHyperdataList
(
Just
parentId
)
nodeDefault
NodeListCooc
parentId
=
node
NodeListCooc
"List"
defaultHyperdataListCooc
(
Just
parentId
)
nodeDefault
NodeModel
parentId
=
node
NodeModel
"Model"
defaultHyperdataModel
(
Just
parentId
)
nodeDefault
NodeFolder
parentId
=
node
NodeFolder
"Folder"
defaultHyperdataFolder
(
Just
parentId
)
nodeDefault
NodeFolderPrivate
parentId
=
node
NodeFolderPrivate
"Private Folder"
defaultHyperdataFolderPrivate
(
Just
parentId
)
nodeDefault
NodeFolderShared
parentId
=
node
NodeFolderShared
"Shared Folder"
defaultHyperdataFolderShared
(
Just
parentId
)
nodeDefault
NodeTeam
parentId
=
node
NodeFolder
"Folder"
defaultHyperdataFolder
(
Just
parentId
)
nodeDefault
NodeFolderPublic
parentId
=
node
NodeFolderPublic
"Public Folder"
defaultHyperdataFolderPublic
(
Just
parentId
)
nodeDefault
NodeGraph
parentId
=
node
NodeGraph
"Graph"
defaultHyperdataGraph
(
Just
parentId
)
nodeDefault
NodePhylo
parentId
=
node
NodePhylo
"Phylo"
defaultHyperdataPhylo
(
Just
parentId
)
nodeDefault
NodeDashboard
parentId
=
node
NodeDashboard
"Dashboard"
defaultHyperdataDashboard
(
Just
parentId
)
nodeDefault
NodeFrameWrite
parentId
=
node
NodeFrameWrite
"Frame Write"
defaultHyperdataFrame
(
Just
parentId
)
nodeDefault
NodeFrameCalc
parentId
=
node
NodeFrameCalc
"Frame Calc"
defaultHyperdataFrame
(
Just
parentId
)
-- nodeDefault nt _ = panic $ "G.D.Q.T.Node.nodeDefault " <> (cs $ show nt)
------------------------------------------------------------------------
------------------------------------------------------------------------
node
::
(
ToJSON
a
,
Hyperdata
a
)
=>
NodeType
...
...
@@ -318,12 +262,14 @@ class MkCorpus a
instance
MkCorpus
HyperdataCorpus
where
mk
n
h
p
u
=
insertNodesR
[
nodeCorpusW
n
h
p
u
]
mk
n
Nothing
p
u
=
insertNode
NodeCorpus
n
Nothing
p
u
mk
n
(
Just
h
)
p
u
=
insertNode
NodeCorpus
n
(
Just
$
DefaultCorpus
h
)
p
u
instance
MkCorpus
HyperdataAnnuaire
where
mk
n
h
p
u
=
insertNodesR
[
nodeAnnuaireW
n
h
p
u
]
mk
n
Nothing
p
u
=
insertNode
NodeCorpus
n
Nothing
p
u
mk
n
(
Just
h
)
p
u
=
insertNode
NodeAnnuaire
n
(
Just
$
DefaultAnnuaire
h
)
p
u
getOrMkList
::
HasNodeError
err
...
...
@@ -333,38 +279,14 @@ getOrMkList :: HasNodeError err
getOrMkList
pId
uId
=
maybe
(
mkList'
pId
uId
)
(
pure
.
view
node_id
)
.
headMay
=<<
getListsWithParentId
pId
where
mkList'
pId
uId
=
maybe
(
nodeError
MkNode
)
pure
.
headMay
=<<
mkNode
NodeList
pId
uId
mkList
::
HasNodeError
err
=>
ParentId
->
UserId
->
Cmd
err
[
ListId
]
mkList
pId
uId
=
mkNode
NodeList
pId
uId
mkList'
pId
uId
=
maybe
(
nodeError
MkNode
)
pure
.
headMay
=<<
insertDefaultNode
NodeList
pId
uId
-- | TODO remove defaultList
defaultList
::
HasNodeError
err
=>
CorpusId
->
Cmd
err
ListId
defaultList
cId
=
maybe
(
nodeError
NoListFound
)
(
pure
.
view
node_id
)
.
headMay
=<<
getListsWithParentId
cId
mkNode
::
NodeType
->
ParentId
->
UserId
->
Cmd
err
[
NodeId
]
mkNode
nt
p
u
=
insertNodesR
[
nodeDefault
nt
p
u
]
mkDashboard
::
ParentId
->
UserId
->
Cmd
err
[
NodeId
]
mkDashboard
p
u
=
insertNodesR
[
nodeDashboardW
Nothing
Nothing
p
u
]
where
nodeDashboardW
::
Maybe
Name
->
Maybe
HyperdataDashboard
->
ParentId
->
UserId
->
NodeWrite
nodeDashboardW
maybeName
maybeDashboard
pId
=
node
NodeDashboard
name
dashboard
(
Just
pId
)
where
name
=
maybe
"Board"
identity
maybeName
dashboard
=
maybe
arbitraryDashboard
identity
maybeDashboard
arbitraryDashboard
::
HyperdataDashboard
arbitraryDashboard
=
HyperdataDashboard
(
Just
"Preferences"
)
[]
getListsWithParentId
::
NodeId
->
Cmd
err
[
Node
HyperdataList
]
getListsWithParentId
n
=
runOpaQuery
$
selectNodesWith'
n
(
Just
NodeList
)
-- import Gargantext.Database.Node.UpdateOpaleye (updateHyperdata)
-- updateNodeUser_fake :: NodeId -> Cmd err Int64
-- updateNodeUser_fake n = updateHyperdata n fake_HyperdataUser
src/Gargantext/Database/Query/Tree/Root.hs
View file @
28993230
...
...
@@ -89,7 +89,7 @@ getOrMk_RootWithCorpus user cName c = do
c'
<-
mk
(
Just
$
fromLeft
"Default"
cName
)
c
rootId
userId
_tId
<-
case
head
c'
of
Nothing
->
pure
[
0
]
Just
c''
->
mk
Node
NodeTexts
c''
userId
Just
c''
->
insertDefault
Node
NodeTexts
c''
userId
pure
c'
corpusId
<-
maybe
(
nodeError
NoCorpusFound
)
pure
(
head
corpusId'
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment