[PureScript] Basic Data Constructors in PureScript

PureScript types are very extensive and we are going to experiment with type constructors and how to make then use them.

We can define a custom data type:

-- Data constructors
data FooType = Foo | Bar String

Define a function, take FooType, return a string:

runFoo :: FooType -> String
-- runFoo take a param Foo which should be string
runFoo Foo = "it is foo"
-- runFoo also can take Bar and String
-- <> is similar to str.concat isn JS
runFoo (Bar s) = "Yeah it's Bar and " <> s

Because FooType is Unit type, we need to define both 'Foo' and '(Bar s)'.

main = render =<< withConsole do
  log $ show $ runFoo (Bar "Wan") -- "Yeah it's Bar and Wan"
  log $ show $ runFoo Foo -- "it is foo"

--

FullCode:

module Main where

import Prelude
import Control.Monad.Eff.Console (log)
import TryPureScript

myTypes :: Int
myTypes = 1

-- add (a -> (b -> (a + b)))
add :: Int -> Int -> Int
add a b = a + b
addMe = \a -> \b -> a + b

-- inc (a -> (add 1 a))
inc :: Int -> Int
inc = add 1

-- Data constructors
data FooType = Foo | Bar String

runFoo :: FooType -> String
-- runFoo take a param Foo which should be string
runFoo Foo = "it is foo"
-- runFoo also can take Bar and String
-- <> is similar to str.concat isn JS
runFoo (Bar s) = "Yeah it's Bar and " <> s


main = render =<< withConsole do
  log $ show $ runFoo (Bar "Wan") -- "Yeah it's Bar and Wan"
  log $ show $ runFoo Foo -- "it is foo"

猜你喜欢

转载自www.cnblogs.com/Answer1215/p/10629816.html