Skip to content

Instantly share code, notes, and snippets.

@SuperCipher
Created May 2, 2022 17:29
Show Gist options
  • Save SuperCipher/22b4f346c6f0968826da444e93a1b5a1 to your computer and use it in GitHub Desktop.
Save SuperCipher/22b4f346c6f0968826da444e93a1b5a1 to your computer and use it in GitHub Desktop.
4 different way to update record in purescript
module Main where
import Prelude
import Effect (Effect)
import Effect.Console (log)
type Person = Age (name :: String)
type Age a =
{ age :: Int | a }
update_person :: Person -> { name :: String, age :: Int}
update_person person =
-- {name : person.name, age : person.age + 1}
person { age = person.age + 1 }
update_person' :: Person -> Person
update_person' person =
-- {name : person.name, age : person.age + 1}
person { age = person.age + 1 }
update_person'' :: forall a. Age a -> Age a
update_person'' person =
-- {name : person.name, age : person.age + 1}
person { age = person.age + 1 }
f :: Person -> Int
f obj = obj.age + 5
main :: Effect Unit
main =
let
pat = { name: "str", age: 1 }
in
do
log (show pat <> " 🍝 " <> show (update_person pat))
log (show pat <> " 🍝 " <> show (update_person' { name: "str", age: 1 }))
log (show pat <> " 🍝 " <> show (update_person'' { name: "str", age: 1 }))
log (show pat <> " 🍝 " <> show (update_person'' pat))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment