diff --git a/src/Gargantext/Components/Forest/Tree/Node/Action/Add.purs b/src/Gargantext/Components/Forest/Tree/Node/Action/Add.purs
index 94e6fa14d75c5cd605f2160cd9e1aeb553c90746..90506ab7badd0f32bfb130a245ff67dffeff0608 100644
--- a/src/Gargantext/Components/Forest/Tree/Node/Action/Add.purs
+++ b/src/Gargantext/Components/Forest/Tree/Node/Action/Add.purs
@@ -9,12 +9,12 @@ import Effect.Uncurried (mkEffectFn1)
 import Gargantext.Components.Forest.Tree.Node (SettingsBox(..), settingsBox)
 import Gargantext.Components.Forest.Tree.Node.Action (Action(..))
 import Gargantext.Components.Forest.Tree.Node.Tools (submitButton)
+import Gargantext.Prelude (Unit, bind, const, map, pure, show, ($), (<>), (>), (<<<), read)
 import Gargantext.Routes as GR
 import Gargantext.Sessions (Session, post)
 import Gargantext.Types  as GT
-import Gargantext.Types (NodeType(..), readNodeType)
+import Gargantext.Types (NodeType(..))
 import Gargantext.Utils.Reactix as R2
-import Prelude (Unit, bind, const, map, pure, show, ($), (<>), (>), (<<<))
 import Reactix as R
 import Reactix.DOM.HTML as H
 
@@ -65,15 +65,14 @@ addNodeView p@{ dispatch, nodeType, nodeTypes } = R.createElement el p []
       nodeName@(name' /\ _) <- R.useState' "Name"
       nodeType'@(nt /\ _)  <- R.useState' $ fromMaybe NodeUser $ head nodeTypes
       pure $ H.div {}
-          [ panelBody   readNodeType nodeName nodeType'
+          [ panelBody nodeName nodeType'
           , submitButton (AddNode name' nt) dispatch -- panelFooter nodeName nodeType'
           ]
       where
-        panelBody :: (String -> NodeType)
-                  -> R.State String
+        panelBody :: R.State String
                   -> R.State NodeType
                   -> R.Element
-        panelBody readIt (_ /\ setNodeName) (nt /\ setNodeType) =
+        panelBody (_ /\ setNodeName) (nt /\ setNodeType) =
           H.div {className: "panel-body"}
           [ H.div {className: "row"}
             [ H.div {className: "col-md-10"}
@@ -84,11 +83,14 @@ addNodeView p@{ dispatch, nodeType, nodeTypes } = R.createElement el p []
                 SettingsBox {edit} = settingsBox nt
                 maybeEdit = [ if edit then
                                 H.div {className: "form-group"}
-                                   [ H.input { type: "text"
-                                             , placeholder: "Node name"
+                                   [ H.input { type        : "text"
+                                             , placeholder : "Node name"
                                              , defaultValue: "Write Name here"
-                                             , className: "form-control"
-                                             , onInput: mkEffectFn1 $ setNodeName <<< const <<< R2.unsafeEventValue
+                                             , className   : "form-control"
+                                             , onInput     : mkEffectFn1
+                                                           $ setNodeName
+                                                           <<< const
+                                                           <<< R2.unsafeEventValue
                                             }
                                    ]
                               else
@@ -99,7 +101,12 @@ addNodeView p@{ dispatch, nodeType, nodeTypes } = R.createElement el p []
                                   R.fragment [
                                     H.div {className: "form-group"} $ [
                                        R2.select { className: "form-control"
-                                                 , onChange: mkEffectFn1 $ setNodeType <<< const <<< readIt <<< R2.unsafeEventValue
+                                                 , onChange : mkEffectFn1
+                                                            $ setNodeType
+                                                            <<< const
+                                                            <<< fromMaybe Error
+                                                            <<< read
+                                                            <<< R2.unsafeEventValue
                                                  }
                                        (map (\opt -> H.option {} [ H.text $ show opt ]) nodeTypes)
                                          ]
diff --git a/src/Gargantext/Components/Nodes/Corpus/Types.purs b/src/Gargantext/Components/Nodes/Corpus/Types.purs
index ce0011703a3778384d41ca0e161b8dcdff8db378..65449ef16776339340d98ebcb3761c6711ce6311 100644
--- a/src/Gargantext/Components/Nodes/Corpus/Types.purs
+++ b/src/Gargantext/Components/Nodes/Corpus/Types.purs
@@ -1,19 +1,14 @@
 module Gargantext.Components.Nodes.Corpus.Types where
 
-import Data.Maybe (Maybe(..))
-import Data.Argonaut (class DecodeJson, class EncodeJson, decodeJson, (.:), (.:?), (:=), (~>), jsonEmptyObject)
+import Data.Argonaut (class DecodeJson, class EncodeJson, decodeJson, (.:), (:=), (~>), jsonEmptyObject)
+import Data.List as List
 import Data.Either (Either(..))
 import Data.Generic.Rep (class Generic)
 import Data.Generic.Rep.Eq (genericEq)
 import Data.Generic.Rep.Show (genericShow)
-import Data.List ((:))
-import Data.List as List
-import Data.Maybe (Maybe)
-
-import Gargantext.Prelude
-
+import Data.Maybe (Maybe(..))
 import Gargantext.Components.Node (NodePoly)
-import Gargantext.Components.Nodes.Corpus.Chart.Predefined as P
+import Gargantext.Prelude
 
 type Author = String
 type Description = String
@@ -25,47 +20,47 @@ type MarkdownText = String
 type Hash = String
 
 newtype Hyperdata =
-  Hyperdata
-  {
-    fields :: List.List FTField
-  }
+  Hyperdata { fields :: List.List FTField }
+
 instance decodeHyperdata :: DecodeJson Hyperdata where
   decodeJson json = do
     obj <- decodeJson json
     fields <- obj .: "fields"
     pure $ Hyperdata {fields}
+
 instance encodeHyperdata :: EncodeJson Hyperdata where
   encodeJson (Hyperdata {fields}) = do
        "fields"  := fields
     ~> jsonEmptyObject
 
-newtype Field a = Field {
-    name :: String
-  , typ  :: a
-  }
+newtype Field a =
+  Field { name :: String
+        , typ  :: a
+        }
+
 type FTField = Field FieldType
+
 derive instance genericFTField :: Generic (Field FieldType) _
+
 instance eqFTField :: Eq (Field FieldType) where
   eq = genericEq
+
 instance showFTField :: Show (Field FieldType) where
   show = genericShow
 
 data FieldType =
-    Haskell {
-    haskell          :: HaskellCode
-  , tag              :: Tag
-  }
-  | JSON {
-    authors        :: Author
-  , desc           :: Description
-  , query          :: Query
-  , tag            :: Tag
-  , title          :: Title
-  }
-  | Markdown {
-    tag              :: Tag
-  , text             :: MarkdownText
-  }
+    Haskell { haskell :: HaskellCode
+            , tag     :: Tag
+            }
+  | JSON { authors :: Author
+         , desc    :: Description
+         , query   :: Query
+         , tag     :: Tag
+         , title   :: Title
+         }
+  | Markdown { tag  :: Tag
+             , text :: MarkdownText
+             }
 
 
 isJSON :: FTField -> Boolean
@@ -90,10 +85,13 @@ getCorpusInfo as = case List.head (List.filter isJSON as) of
                                                  }
 
 derive instance genericFieldType :: Generic FieldType _
+
 instance eqFieldType :: Eq FieldType where
   eq = genericEq
+
 instance showFieldType :: Show FieldType where
   show = genericShow
+
 instance decodeFTField :: DecodeJson (Field FieldType) where
   decodeJson json = do
     obj <- decodeJson json
@@ -118,6 +116,7 @@ instance decodeFTField :: DecodeJson (Field FieldType) where
         pure $ Markdown {tag, text}
       _ -> Left $ "Unsupported 'type' " <> type_
     pure $ Field {name, typ}
+
 instance encodeFTField :: EncodeJson (Field FieldType) where
   encodeJson (Field {name, typ}) =
        "data"  := typ
@@ -128,6 +127,7 @@ instance encodeFTField :: EncodeJson (Field FieldType) where
       typ' (Haskell _)  = "Haskell"
       typ' (JSON _)     = "JSON"
       typ' (Markdown _) = "Markdown"
+
 instance encodeFieldType :: EncodeJson FieldType where
   encodeJson (Haskell {haskell}) =
        "haskell" := haskell
@@ -146,42 +146,51 @@ instance encodeFieldType :: EncodeJson FieldType where
     ~> jsonEmptyObject
 
 defaultHaskell :: FieldType
-defaultHaskell = Haskell defaultHaskell'
-defaultHaskell' = {
-    haskell: ""
-  , tag: "HaskellField"
-  }
+defaultHaskell  = Haskell defaultHaskell'
+
+defaultHaskell' :: { haskell :: String, tag :: String }
+defaultHaskell' = { haskell: ""
+                  , tag    : "HaskellField"
+                  }
 
 defaultJSON :: FieldType
 defaultJSON = JSON defaultJSON'
-defaultJSON' = {
-    authors: ""
-  , desc: ""
-  , query: ""
-  , tag: "JSONField"
-  , title: ""
-}
+
+
+defaultJSON' :: { authors :: String
+                , desc :: String
+                , query :: String
+                , tag :: String
+                , title :: String
+                }
+defaultJSON' = { authors: ""
+               , desc: ""
+               , query: ""
+               , tag: "JSONField"
+               , title: ""
+               }
 
 defaultMarkdown :: FieldType
 defaultMarkdown = Markdown defaultMarkdown'
-defaultMarkdown' = {
-    tag: "MarkdownField"
-  , text: "# New file"
-  }
+defaultMarkdown' :: { tag  :: String
+                    , text :: String
+                    }
+defaultMarkdown' = { tag: "MarkdownField"
+                   , text: "# New file"
+                   }
 
 defaultField :: FTField
-defaultField = Field {
-    name: "New file"
-  , typ: defaultMarkdown
-  }
+defaultField = Field { name: "New file"
+                    , typ: defaultMarkdown
+                    }
 
 newtype CorpusInfo =
-  CorpusInfo
-  { title        :: String
-  , authors      :: String
-  , desc         :: String
-  , query        :: String
-  , totalRecords :: Int }
+  CorpusInfo { title        :: String
+             , authors      :: String
+             , desc         :: String
+             , query        :: String
+             , totalRecords :: Int
+             }
 
 instance decodeCorpusInfo :: DecodeJson CorpusInfo where
   decodeJson json = do
diff --git a/src/Gargantext/Components/Nodes/Dashboard/Types.purs b/src/Gargantext/Components/Nodes/Dashboard/Types.purs
index 332662e34e3ef74580f9d33f811d353c02eae6cc..fa3bc1f7ceb570c847b47c7f5b03deae28e584fa 100644
--- a/src/Gargantext/Components/Nodes/Dashboard/Types.purs
+++ b/src/Gargantext/Components/Nodes/Dashboard/Types.purs
@@ -1,13 +1,10 @@
 module Gargantext.Components.Nodes.Dashboard.Types where
 
-import Data.Maybe (Maybe(..))
 import Data.Argonaut (class DecodeJson, class EncodeJson, decodeJson, (.:), (.:?), (:=), (~>), jsonEmptyObject)
-import Data.Maybe (Maybe)
+import Data.Maybe (Maybe(..))
 import Effect.Aff (Aff)
-
-import Gargantext.Prelude
-
 import Gargantext.Components.Nodes.Corpus.Chart.Predefined as P
+import Gargantext.Prelude
 import Gargantext.Routes (SessionRoute(NodeAPI))
 import Gargantext.Sessions (Session, get, put)
 import Gargantext.Types (NodeType(..))
diff --git a/src/Gargantext/Types.purs b/src/Gargantext/Types.purs
index d80e4e3e5a2dd955ff3ce558bbec76df3a541f6f..ae8da7ccbe864f32cb1a0241823c3a38a23356bb 100644
--- a/src/Gargantext/Types.purs
+++ b/src/Gargantext/Types.purs
@@ -9,11 +9,11 @@ import Data.Generic.Rep.Eq (genericEq)
 import Data.Generic.Rep.Ord (genericCompare)
 import Data.Generic.Rep.Show (genericShow)
 import Data.Int (toNumber)
-import Data.Maybe (Maybe(..), maybe)
+import Data.Maybe (Maybe(..), maybe, fromMaybe)
 import Effect.Aff (Aff)
 import Prim.Row (class Union)
 import URI.Query (Query)
-import Gargantext.Prelude (class Read)
+import Gargantext.Prelude (class Read, read)
 
 type ID     = Int
 type Name   = String
@@ -178,30 +178,28 @@ instance showNodeType :: Show NodeType where
   show NodeList      = "NodeList"
   show Texts         = "NodeTexts"
 
-readNodeType :: String -> NodeType
-readNodeType "NodeUser"      = NodeUser
-
-readNodeType "NodeFolder"    = Folder
-readNodeType "NodeFolderPrivate" = FolderPrivate
-readNodeType "NodeFolderShared"  = FolderShared
-readNodeType "NodeFolderPublic"  = FolderPublic
-
-readNodeType "NodeAnnuaire"  = Annuaire
-readNodeType "NodeDashboard" = Dashboard
-readNodeType "Document"      = Url_Document
-readNodeType "NodeGraph"     = Graph
-readNodeType "NodePhylo"     = Phylo
-readNodeType "Individu"      = Individu
-readNodeType "Node"          = Node
-readNodeType "Nodes"         = Nodes
-readNodeType "NodeCorpus"    = Corpus
-readNodeType "NodeContact"   = NodeContact
-readNodeType "Tree"          = Tree
-readNodeType "NodeTeam"      = Team
-readNodeType "NodeList"      = NodeList
-readNodeType "NodeTexts"     = Texts
-readNodeType "Annuaire"      = Annuaire
-readNodeType _               = Error
+instance readNodeType :: Read NodeType where
+  read "NodeUser"          = Just NodeUser
+  read "NodeFolder"        = Just Folder
+  read "NodeFolderPrivate" = Just FolderPrivate
+  read "NodeFolderShared"  = Just FolderShared
+  read "NodeFolderPublic"  = Just FolderPublic
+  read "NodeAnnuaire"  = Just Annuaire
+  read "NodeDashboard" = Just Dashboard
+  read "Document"      = Just Url_Document
+  read "NodeGraph"     = Just Graph
+  read "NodePhylo"     = Just Phylo
+  read "Individu"      = Just Individu
+  read "Node"          = Just Node
+  read "Nodes"         = Just Nodes
+  read "NodeCorpus"    = Just Corpus
+  read "NodeContact"   = Just NodeContact
+  read "Tree"          = Just Tree
+  read "NodeTeam"      = Just Team
+  read "NodeList"      = Just NodeList
+  read "NodeTexts"     = Just Texts
+  read "Annuaire"      = Just Annuaire
+  read _               = Nothing
 
 
 fldr :: NodeType -> Boolean -> String
@@ -256,7 +254,7 @@ instance eqNodeType :: Eq NodeType where
 instance decodeJsonNodeType :: DecodeJson NodeType where
   decodeJson json = do
     obj <- decodeJson json
-    pure $ readNodeType obj
+    pure $ fromMaybe Error $ read obj
 
 instance encodeJsonNodeType :: EncodeJson NodeType where
   encodeJson nodeType = encodeJson $ show nodeType