Skip to content

Instantly share code, notes, and snippets.

View jjant's full-sized avatar
馃挜

Julian Antonielli jjant

馃挜
View GitHub Profile
employeeFromDbToApplication : EmployeeFromDb1 -> List Employee1 -> Employee1
employeeFromDbToApplication (EmployeeFromDb1 empDb) employees =
Employee1
{ id = empDb.id
, name = empDb.name
, age = empDb.age
, employees = employees
}
@jjant
jjant / lookUpEmployee1.elm
Created August 22, 2018 23:51
Won't typecheck
type alias Table1 =
List EmployeeFromDb1
lookUpEmployee1 : Id -> Table -> Maybe Employee1
lookUpEmployee1 id table =
table
|> List.filter (\employee -> employee.id == id)
|> List.head
type EmployeeFromDb1
= EmployeeFromDb1
{ id : Id
, name : String
, age : Int
, employerId : Id
}
type alias Id =
Int
type Employee1
= Employee1
{ id : Id
, name : String
, age : Int
, employees : List Employee1
map : (a -> b) -> Employee a -> Employee b
map f (Employee sharedData a) =
Employee sharedData (f a)
replace : b -> Employee a -> Employee b
replace b =
map (\_ -> b)
employeeAppToEmployeeCount : EmployeeApp -> EmployeeWithCount
employeeAppToEmployeeCount employeeApp =
map (\employees -> List.length employees) employeeApp
zero :: FreeMonoid t
zero = Zero
(<>) :: FreeMonoid t -> FreeMonoid t -> FreeMonoid t
Zero <> x = x -- Left identity
x <> Zero = x -- Right identity
(Combine t1 rest1) <> x =
-- `(a <> b) <> x` is represented as `a <> (b <> x)`
Combine t1 (rest1 <> x)
interpret :: b -> (a -> b -> b) -> FreeMonoid a -> b
interpret myZero myCombine Zero = myZero
interpret myZero myCombine (Combine a rest) =
a `myCombine` (interpret myZero myCombine rest) -- a `Combine` (b `Combine` Zero) -> a `myCombine` (b `myCombine` myZero)
isAdmin :: FreeMonoid (String, Bool) -> Bool
isAdmin perms = interpret True (\(_, perm) rest -> perm && rest) perms
isPowerUser :: FreeMonoid (String, Bool) -> Bool
isPowerUser perms = interpret False (\(_, perm) rest -> perm || rest) perms
isRegularUser :: FreeMonoid (String, Bool) -> Bool
isRegularUser perms = not (isPowerUser perms)
@jjant
jjant / FreeMonoid1.hs
Created September 9, 2018 19:35
First attempt at writing a free monoid
data FreeMonoid1 t
= Zero
| Val t
| Combine (FreeMonoid1 t) (FreeMonoid1 t)