Skip to content

Instantly share code, notes, and snippets.

@mikesol
Created October 13, 2021 06:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mikesol/1fd5ea5f84e86c7bacb5c20983bf748c to your computer and use it in GitHub Desktop.
Save mikesol/1fd5ea5f84e86c7bacb5c20983bf748c to your computer and use it in GitHub Desktop.
Avoiding unsafe
module Main where
import Prelude
import Data.Maybe (Maybe, maybe)
import Data.Traversable (traverse)
import Debug (spy)
import Effect (Effect)
import Effect.Exception (throw)
import Web.DOM.Element (getAttribute, toNode)
import Web.DOM.Element as Element
import Web.DOM.Node (parentElement)
import Web.DOM.NodeList as NodeList
import Web.DOM.ParentNode (QuerySelector(..), querySelector, querySelectorAll)
import Web.HTML (window)
import Web.HTML.HTMLDocument as HTMLDocument
import Web.HTML.Window (document)
mob :: forall a. Effect (Maybe a) -> Effect a
mob e = e >>= maybe (throw "Could not get element") pure
mob' :: forall a. Maybe a -> Effect a
mob' e = mob (pure e)
main :: Effect Unit
main = do
datas <-
window
>>= document
<#> HTMLDocument.toParentNode
>>= (querySelectorAll $ QuerySelector "[data-kategoria]")
>>= NodeList.toArray
>>= traverse \e -> do
cellElement <-
e
# parentElement
# mob
<#> toNode
>>= parentElement
# mob
<#> toNode
>>= parentElement
# mob
<#> Element.toParentNode
ado
textElement <-
cellElement
# (querySelector $ QuerySelector ".food-etlap-szoveg")
# mob
kategoria <-
e
# Element.fromNode
# mob'
>>= getAttribute "data-kategoria"
# mob
datum <-
e
# Element.fromNode
# mob'
>>= getAttribute "data-datum"
# mob
ar <-
cellElement
# (querySelector $ QuerySelector ".price")
# mob
<#> Element.toParentNode
>>= (querySelector $ QuerySelector ".center")
# mob
in { textElement, kategoria, datum, ar }
let
_ = spy "" datas
pure unit
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment