Title here
Summary here
module Main where
import Prelude
import Effect (Effect)
import Effect.Console (log)
import Data.Array (length, slice, updateAt, concat, zipWith)
import Data.Maybe (fromMaybe)
main :: Effect Unit
main = do
-- Unlike arrays, lists in PureScript are homogeneous but don't have a fixed length.
-- An empty list is represented as [].
let s = [] :: Array String
log $ "uninit: " <> show s <> " " <> show (s == []) <> " " <> show (length s == 0)
-- To create an array with a specific length, we can use replicate
let s' = replicate 3 ""
log $ "emp: " <> show s' <> " len: " <> show (length s')
-- We can set and get elements just like with arrays
let s'' = fromMaybe s' $ updateAt 0 "a" s'
let s''' = fromMaybe s'' $ updateAt 1 "b" s''
let s'''' = fromMaybe s''' $ updateAt 2 "c" s'''
log $ "set: " <> show s''''
log $ "get: " <> show (s'''' !! 2)
-- length returns the length of the array as expected
log $ "len: " <> show (length s'''')
-- We can use concat to append elements to an array
let s''''' = concat [s'''', ["d"]]
let s'''''' = concat [s''''', ["e", "f"]]
log $ "apd: " <> show s''''''
-- Arrays can be copied using the spread operator
let c = s''''''
log $ "cpy: " <> show c
-- Arrays support slicing with the slice function
log $ "sl1: " <> show (slice 2 5 s'''''')
log $ "sl2: " <> show (slice 0 5 s'''''')
log $ "sl3: " <> show (slice 2 (length s'''''') s'''''')
-- We can declare and initialize an array in a single line
let t = ["g", "h", "i"]
log $ "dcl: " <> show t
-- PureScript doesn't have a built-in equality check for arrays,
-- but we can implement one
let t2 = ["g", "h", "i"]
log $ if t == t2 then "t == t2" else "t != t2"
-- Arrays can be composed into multi-dimensional data structures
let twoD = [ [0]
, [1, 2]
, [2, 3, 4]
]
log $ "2d: " <> show twoD
-- Helper function to replicate an element n times
replicate :: forall a. Int -> a -> Array a
replicate n x = map (const x) (0 .. (n - 1))
-- Helper function to create a range of integers
(..) :: Int -> Int -> Array Int
(..) start end = go start where
go i | i > end = []
| otherwise = i : go (i + 1)
-- Helper function for array indexing
(!!) :: forall a. Array a -> Int -> Maybe a
(!!) arr i = arr !! iThis PureScript code demonstrates concepts similar to Go’s slices, using PureScript’s arrays. Here are some key differences and notes:
Array for dynamic-sized, homogeneous collections, which is similar to Go’s slices.make function for arrays. Instead, we use a custom replicate function to create an array of a specific length.append operation in PureScript is achieved using the concat function.updateAt for updating specific indices in an array, which returns a Maybe type.slice function.== operator in PureScript performs structural equality check for arrays, so we don’t need a separate Equal function.This example showcases how to work with arrays in PureScript, covering initialization, manipulation, and common operations, mirroring the concepts presented in the original Go example for slices.
Comments powered by Disqus