Incrementally Adopting PureScript in a JavaScript Web Application
Mike Solomon
Posted on August 11, 2021
One little-known fact about PureScript is that it is easy to incrementally adopt in a JavaScript project. That means that you can use it in places where a functional style makes sense and otherwise use any other combination of frameworks or just plain ol' JS.
In this article, I'll show you how to set up a React project and integrate PureScript. The whole thing should take less than 5m.
Creating your React App
In my case, I ran npm install -g create-react app
followed by create-react-app my-app
.
After cd
-ing into my-app
, I installed the dev dependencies to work with PureScript.
$ yarn add dev purescript spago purty
I then opened the project in VSCode.
PureScript Setup
The equivalent of create-react-app
in PureScript-land is spago init
. By running spago init
, the tool spago
will add all of the files you need to work with PureScript development.
$ npx spago init
For smoother PureScript editing, I also recommend installing two VSCode extensions for working with PureScript: PureScript IDE and PureScript Language Support.
The next step is to add build and test commands to your package.json
. The react commands are already there from create-react-app
, so we'll just add the PureScript ones. As we're working with a React app, it's idiomatic to have all of the JS code under the src/
directory. We'll add an argument to spago build
to make sure the generated files go to a folder in the src/
directory.
"scripts": {
"start": "react-scripts start",
"build": "spago build --purs-args \"-o src/generated-ps/\" && react-scripts build",
"test": "spago test --purs-args \"-o src/generated-ps/\" && react-scripts test",
"eject": "react-scripts eject"
}
Let's write some PureScript code
Now that the setup is done, let's create a file called PSCode.purs
under the src/
directory. We'll give it the following content.
module PSCode where
import Prelude
myString = "hello react" :: String
myFunc :: Int -> Int -> Int
myFunc a b = a + b
When we run yarn build
, we can see that spago
picks up this file automatically and creates the src/generated-ps
directory.
Putting it all together
Now, in App.js
- the main application file generated by create-react-app
- we can include the PS code.
We call the PS functions just like any other JavaScript function. The only caveat is that PS functions only take one argument at a time, so instead of calling myFunc(3,7)
we call myFunc(3)(7)
.
When we run yarn start
, here's what we get:
Conclusion
Incorporating PureScript into a JS-based web project is a great way to learn the language. You can write certain parts of a project in PureScript without needing to rewrite the whole project.
I hope you get a chance to try PureScript out in your JS projects! For more learning resources, you can check out PureScript website.
Posted on August 11, 2021
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.