Thursday October 5th
PureScript Night recap
- Tuesday night, we had our first PureScript Meetup!
Here are some of my notes!
JS issues … why PureScript
- JS had for Phil, an inability to reason about code
- scaling up/ getting up to speed with a large code-base is often difficult
- PureScript produces minimal and easily readable JS
- it doesn’t contain bloated libraries; you use more of only what you need
- Haskell beginners can contribute
- it has a fast runtime system
- strong expressive types
- there is more predictability of code from PureScript to JS
Why he wrote a language vs taking it off the shelf
- TypeScript/Flow vs PureScript
- real row polymorphism from type checker
- ADTs
- Haste/Fay
- Fay didn’t include typeclasses support
- GHCJS was not easy to read for JS team
- didn’t have runtime
- Roy (programming language) was the closest that satisfied what he wanted
Resources
- Pursuit - PureScript documentation (built with Yesod)
- PureScript Contrib
- PureScript Node
- PureScript web
- Core libraries
- !!YPER (server side rendered), uses type system to enforce certain things
- Pux (for front end applications)
- PureScript Halogen (100% PureScript)
Applications
- Slamdata has 100% PureScript on front end (developed Halogen)
- Quicktype -IDL
- Insect (a personal favourite of mine! )
Getting Started
- install pureScript contrib
- most people use
pulp
- book (PureScript by example)
- Getting started with PureScript (pureScript documentation)
Future Work
- ApplicativeDo
- SAT Solvers (constraints/ solutions)
- parsing JSON
- argonaut
- simple generics
CodeGen talk
- Brady did a talk on using CodeGen in PureScript from Haskell Types
After Meetup-hangout
- We went out for drinks afterwards at the Arts District Brewery. It was really fun! Phil was also kind enough to give two of us a ride home. :) I have a lot of great expectations for this group!
This led to my writing my first PureScript programme!
- I started a repo with such projects, as I continue attending the Meetup and work on PureScript on my own.
On my own
- started going through the documentation
Easy to get set up
- It’s surprisingly easy to get up and running with PureScript. Here is checking the type of “map”.
- They have you do Euler question number 1. I’ve done it in Python before, so that was my comparison
- The prompt upon leaving
- Obligatory “Hello World” in PureScript
- installing pureScript-global and browsing the module
- solution for my exercise from my first programme
Katas
- Find number of non-even substrings in a string integer
def solve(s):
arr = []
import itertools
a = (s[i:j] for i, j in itertools.combinations(xrange(len(s)+1), 2))
for i in a:
if int(i) % 2 != 0:
arr.append(i)
return len(arr)
- Find number in word and return its integer equivalent
function findNum(n){
result = 0
n = n.toLowerCase()
var a = n.replace(/[^\w\s!.]/g,'');
var b = a.replace(/ /g,'')
for (var i = 0; i < b.length; i++){
if (b.indexOf('one') !== -1){
result = 1
}
else if (b.indexOf('two') !== -1){
result = 2
}
else if (b.indexOf('three') !== -1){
result = 3
}
else if (b.indexOf('four') !== -1){
result = 4
}
else if (b.indexOf('five') !== -1){
result = 5
}
else if (b.indexOf('six') !== -1){
result = 6
}
else if (b.indexOf('seven') !== -1){
result = 7
}
else if (b.indexOf('eight') !== -1){
result = 8
}
else if (b.indexOf('nine') !== -1){
result = 9
}
else if (b.indexOf('ten') !== -1){
result = 10
}
}
return result
}
- take an array, sort it in desc order and add liftoff essentially
function liftoff(instructions){
instructions = instructions.sort((a, b) => a - b);
var a = instructions.reverse()
var b = a.join(' ') + ' liftoff!'
return(b)
}
- collatz conjecture..count how long it takes number to reach it…
def get_collatz(n):
#print n
count = 0
while (not n == 1):
if n % 2 == 0:
n = n / 2
count = count + 1
else:
n = (3 * n) + 1
count = count + 1
return count
- return day given digit eg 1 == Monday, etc
function whatday(num) {
if ((num) == 1){
return 'Sunday'
}
else if ((num == 2)){
return 'Monday'
}
else if ((num == 3)){
return 'Tuesday'
}
else if ((num == 4)){
return 'Wednesday'
}
else if ((num == 5)){
return 'Thursday'
}
else if ((num == 6)){
return 'Friday'
}
else if ((num == 7)){
return 'Saturday'
}
else{
return 'Wrong, please enter a number between 1 and 7'
}
- check if string includes ‘tree fiddy’ or ‘3.50’ or ‘three fifty’
function isLockNessMonster(s) {
var a = 'tree fiddy'
var b = '3.50'
var c = 'three fifty'
if (s.includes(a) || s.includes(b) || s.includes(c)){
return true
}
else{
return false
}
return
}
- Armstrong number. If for each digit raised to pow 3, total/sum is the number, return true
function armstrong(num){
var a = num.toString()
var b = a.split("")
var total = 0
for (var i = 0; i < b.length; i++)
{
var c = Math.pow(parseInt(b[i]), 3)
total = total + c
}
if (total == num){
return(true)
}
else{
return(false)
}
return
}
- turn num to binary string
def int_to_bin(x):
z = str(bin(x));
return z[2:]
Written on October 5, 2017