Browse Source

Add traversable instances

jherve 1 year ago
parent
commit
65d02feba1
3 changed files with 56 additions and 0 deletions
  1. 40 0
      src/LinkedIn/ArtDeco.purs
  2. 8 0
      src/LinkedIn/ArtDecoCard.purs
  3. 8 0
      src/LinkedIn/ArtDecoTab.purs

+ 40 - 0
src/LinkedIn/ArtDeco.purs

@@ -10,6 +10,7 @@ import Data.List.NonEmpty (NonEmptyList)
 import Data.List.NonEmpty as NEL
 import Data.Maybe (Maybe)
 import Data.Show.Generic (genericShow)
+import Data.Traversable (class Traversable, sequence, traverseDefault)
 import LinkedIn (DetachedNode)
 import LinkedIn.Profile.Utils (toUIElement)
 import LinkedIn.Types (Parser)
@@ -51,6 +52,13 @@ instance Foldable ArtDecoPvsEntitySubComponent where
   foldl = \x -> foldlDefault x
   foldr = \x -> foldrDefault x
 
+instance Traversable ArtDecoPvsEntitySubComponent where
+  sequence (ArtDecoPvsEntitySubComponent subComponents) = ado
+    sc <- sequence subComponents
+  in ArtDecoPvsEntitySubComponent sc
+
+  traverse = \x -> traverseDefault x
+
 derive instance Generic (ArtDecoCenterContent a) _
 derive instance Eq a => Eq(ArtDecoCenterContent a)
 instance Show a => Show(ArtDecoCenterContent a) where
@@ -63,6 +71,13 @@ instance Foldable ArtDecoCenterContent where
   foldl = \x -> foldlDefault x
   foldr = \x -> foldrDefault x
 
+instance Traversable ArtDecoCenterContent where
+  sequence (ArtDecoCenterContent center) = ado
+    c <- sequence (map sequence center)
+  in ArtDecoCenterContent c
+
+  traverse = \x -> traverseDefault x
+
 derive instance Generic (ArtDecoCenterHeader a) _
 derive instance Eq a => Eq(ArtDecoCenterHeader a)
 instance Show a => Show(ArtDecoCenterHeader a) where
@@ -75,6 +90,15 @@ instance Foldable ArtDecoCenterHeader where
   foldl = \x -> foldlDefault x
   foldr = \x -> foldrDefault x
 
+instance Traversable ArtDecoCenterHeader where
+  sequence (ArtDecoCenterHeader {bold, normal, light}) = ado
+    b <- bold
+    n <- sequence normal
+    l <- sequence (map sequence light)
+  in ArtDecoCenterHeader {bold: b, normal: n, light: l}
+
+  traverse = \x -> traverseDefault x
+
 derive instance Generic (ArtDecoCenter a) _
 derive instance Eq a => Eq(ArtDecoCenter a)
 instance Show a => Show(ArtDecoCenter a) where
@@ -87,6 +111,14 @@ instance Foldable ArtDecoCenter where
   foldl = \x -> foldlDefault x
   foldr = \x -> foldrDefault x
 
+instance Traversable ArtDecoCenter where
+  sequence (ArtDecoCenter {header, content}) = ado
+    h <- sequence header
+    c <- sequence content
+  in ArtDecoCenter {header: h, content: c}
+
+  traverse = \x -> traverseDefault x
+
 derive instance Generic (ArtDecoPvsEntity a) _
 derive instance Eq a => Eq(ArtDecoPvsEntity a)
 instance Show a => Show(ArtDecoPvsEntity a) where
@@ -99,6 +131,14 @@ instance Foldable ArtDecoPvsEntity where
   foldl = \x -> foldlDefault x
   foldr = \x -> foldrDefault x
 
+instance Traversable ArtDecoPvsEntity where
+  sequence (ArtDecoPvsEntity {side, center}) = ado
+    s <- pure side
+    c <- sequence center
+  in ArtDecoPvsEntity {side: s, center: c}
+
+  traverse = \x -> traverseDefault x
+
 parseArtDecoPvsEntitySubComponent ∷ Parser (ArtDecoPvsEntitySubComponent DetachedNode)
 parseArtDecoPvsEntitySubComponent n = do
   content <- queryAndDetachOne "span[aria-hidden=true]" n

+ 8 - 0
src/LinkedIn/ArtDecoCard.purs

@@ -8,6 +8,7 @@ import Data.List (List)
 import Data.List.Types (NonEmptyList)
 import Data.Maybe (Maybe)
 import Data.Show.Generic (genericShow)
+import Data.Traversable (class Traversable, sequence, traverseDefault)
 import LinkedIn (DetachedNode)
 import LinkedIn.ArtDeco (ArtDecoPvsEntity, parseArtDecoPvsEntity)
 import LinkedIn.ArtDeco as AD
@@ -32,6 +33,13 @@ instance Foldable ArtDecoCardElement where
   foldl = \x -> foldlDefault x
   foldr = \x -> foldrDefault x
 
+instance Traversable ArtDecoCardElement where
+  sequence (ArtDecoCardElement {pvs_entity}) = ado
+    p <- sequence pvs_entity
+  in ArtDecoCardElement {pvs_entity: p}
+
+  traverse = \x -> traverseDefault x
+
 parseArtDecoCard :: Parser (ArtDecoCardElement DetachedNode)
 parseArtDecoCard n = do
   pvs <- queryOneAndParse ":scope div.pvs-entity--padded" parseArtDecoPvsEntity n

+ 8 - 0
src/LinkedIn/ArtDecoTab.purs

@@ -8,6 +8,7 @@ import Data.List (List)
 import Data.List.Types (NonEmptyList)
 import Data.Maybe (Maybe)
 import Data.Show.Generic (genericShow)
+import Data.Traversable (class Traversable, sequence, traverseDefault)
 import LinkedIn (DetachedNode)
 import LinkedIn.ArtDeco (ArtDecoPvsEntity, parseArtDecoPvsEntity)
 import LinkedIn.ArtDeco as AD
@@ -31,6 +32,13 @@ instance Foldable ArtDecoTabElement where
   foldl = \x -> foldlDefault x
   foldr = \x -> foldrDefault x
 
+instance Traversable ArtDecoTabElement where
+  sequence (ArtDecoTabElement {pvs_entity}) = ado
+    p <- sequence pvs_entity
+  in ArtDecoTabElement {pvs_entity: p}
+
+  traverse = \x -> traverseDefault x
+
 parseArtDecoTab :: Parser (ArtDecoTabElement DetachedNode)
 parseArtDecoTab n = do
   pvs <- queryOneAndParse ":scope div.pvs-entity--padded" parseArtDecoPvsEntity n