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 -> -> 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"