Skip to content

Commit

Permalink
Update examples with seq and backquoted infixes
Browse files Browse the repository at this point in the history
  • Loading branch information
hrutvik committed Mar 9, 2023
1 parent 8afdae1 commit ba9f012
Showing 10 changed files with 22 additions and 20 deletions.
2 changes: 1 addition & 1 deletion examples/factorials.hs
Original file line number Diff line number Diff line change
@@ -68,7 +68,7 @@ toString :: Integer -> String
toString i =
let toString0 i =
if i == 0 then []
else (mod i 10 + 48) : toString0 (div i 10)
else (i `mod` 10 + 48) : toString0 (i `div` 10)
in if i < 0 then "-" ++ (implode $ reverse $ toString0 (0-i))
else if i == 0 then "0"
else implode $ reverse $ toString0 i
2 changes: 1 addition & 1 deletion examples/gameOfLife.hs
Original file line number Diff line number Diff line change
@@ -184,7 +184,7 @@ toString :: Integer -> String
toString i =
let toString0 i =
if i == 0 then []
else (mod i 10 + 48) : toString0 (div i 10)
else (i `mod` 10 + 48) : toString0 (i `div` 10)
in if i < 0 then "-" ++ (implode $ reverse $ toString0 (0-i))
else if i == 0 then "0"
else implode $ reverse $ toString0 i
4 changes: 2 additions & 2 deletions examples/maxCollatzSequence.hs
Original file line number Diff line number Diff line change
@@ -26,7 +26,7 @@ collatzSequence n =
in seqAux 0 n

collatz :: Integer -> Integer
collatz n = if mod n 2 == 0 then div n 2 else 3 * n + 1
collatz n = if n `mod` 2 == 0 then n `div` 2 else 3 * n + 1


-- Helper functions
@@ -84,7 +84,7 @@ toString :: Integer -> String
toString i =
let toString0 i =
if i == 0 then []
else (mod i 10 + 48) : toString0 (div i 10)
else (i `mod` 10 + 48) : toString0 (i `div` 10)
in if i < 0 then "-" ++ (implode $ reverse $ toString0 (0-i))
else if i == 0 then "0"
else implode $ reverse $ toString0 i
2 changes: 1 addition & 1 deletion examples/permutations.hs
Original file line number Diff line number Diff line change
@@ -84,7 +84,7 @@ toString :: Integer -> String
toString i =
let toString0 i =
if i == 0 then []
else (mod i 10 + 48) : toString0 (div i 10)
else (i `mod` 10 + 48) : toString0 (i `div` 10)
in if i < 0 then "-" ++ (implode $ reverse $ toString0 (0-i))
else if i == 0 then "0"
else implode $ reverse $ toString0 i
6 changes: 3 additions & 3 deletions examples/prelude/integers.hs
Original file line number Diff line number Diff line change
@@ -44,14 +44,14 @@ factorial n =
gcd :: Integer -> Integer -> Integer
gcd n m =
let gcd' a b = if b == 0 then a
else gcd' b (mod a b)
else gcd' b (a `mod` b)
in gcd' (abs n) (abs m)

collatz :: Integer -> [Integer]
collatz n =
let n' = abs n
rest = if n' < 2 then []
else if mod n' 2 == 0 then collatz (div n 2)
else if n' `mod` 2 == 0 then collatz (n `div` 2)
else collatz (3 * n + 1)
in n' : rest

@@ -85,7 +85,7 @@ fromString s =
toString :: Integer -> String
toString i =
let toStringAux acc i = if i == 0 then acc
else toStringAux ((mod i 10 + 48) : acc) (div i 10)
else toStringAux ((i `mod` 10 + 48) : acc) (i `div` 10)
implode l = case l of [] -> ""
h:t -> #(__Concat) (#(__Implode) h) (implode t)
in if i < 0 then #(__Concat) "-" (toString (abs i))
10 changes: 5 additions & 5 deletions examples/prelude/lists.hs
Original file line number Diff line number Diff line change
@@ -2,7 +2,7 @@ main :: IO ()
main = do
Ret (append, head, last, tail, singleton, null, length)
Ret (map, reverse)
Ret (foldr, foldl, unfoldr, concat, all, any)
Ret (foldr, foldl, foldl', unfoldr, concat, all, any)
Ret (iterate, repeat, replicate)
Ret (take, drop)
Ret (filter, first, lookup, index)
@@ -64,10 +64,10 @@ foldl :: (b -> a -> b) -> b -> [a] -> b
foldl f acc l = case l of [] -> acc
h:t -> foldl f (f acc h) t

-- foldl' :: (b -> a -> b) -> b -> [a] -> b
-- foldl' f acc l = case l of [] -> acc
-- h:t -> let acc' = f acc h in
-- seq acc' (foldl' f acc' t)
foldl' :: (b -> a -> b) -> b -> [a] -> b
foldl' f acc l = case l of [] -> acc
h:t -> let acc' = f acc h in
acc' `seq` (foldl' f acc' t)

unfoldr :: (b -> Maybe (a, b)) -> b -> [a]
unfoldr f x =
6 changes: 3 additions & 3 deletions examples/primes.hs
Original file line number Diff line number Diff line change
@@ -19,7 +19,7 @@ primesA =
let sieve l =
case l of
[] -> [] -- should not happen
h:t -> h : filter (\n -> not $ mod n h == 0) (sieve t)
h:t -> h : filter (\n -> not $ n `mod` h == 0) (sieve t)
in sieve $ numbers 2

primeA :: Integer -> Integer
@@ -31,7 +31,7 @@ primeA n = idx n primesA
isPrime :: Integer -> Bool
isPrime n =
let checkPrime div n = if n < div * div then True
else if mod n div == 0 then False
else if n `mod` div == 0 then False
else checkPrime (div + 1) n
in if n < 2 then False else checkPrime 2 n

@@ -88,7 +88,7 @@ toString :: Integer -> String
toString i =
let toString0 i =
if i == 0 then []
else (mod i 10 + 48) : toString0 (div i 10)
else (i `mod` 10 + 48) : toString0 (i `div` 10)
in if i < 0 then "-" ++ (implode $ reverse $ toString0 (0-i))
else if i == 0 then "0"
else implode $ reverse $ toString0 i
2 changes: 1 addition & 1 deletion examples/queens.hs
Original file line number Diff line number Diff line change
@@ -93,7 +93,7 @@ toString :: Integer -> String
toString i =
let toString0 i =
if i == 0 then []
else (mod i 10 + 48) : toString0 (div i 10)
else (i `mod` 10 + 48) : toString0 (i `div` 10)
in if i < 0 then "-" ++ (implode $ reverse $ toString0 (0-i))
else if i == 0 then "0"
else implode $ reverse $ toString0 i
2 changes: 1 addition & 1 deletion examples/quicksort.hs
Original file line number Diff line number Diff line change
@@ -180,7 +180,7 @@ toString :: Integer -> String
toString i =
let toString0 i =
if i == 0 then []
else (mod i 10 + 48) : toString0 (div i 10)
else (i `mod` 10 + 48) : toString0 (i `div` 10)
in if i < 0 then "-" ++ (implode $ reverse $ toString0 (0-i))
else if i == 0 then "0"
else implode $ reverse $ toString0 i
6 changes: 4 additions & 2 deletions examples/syntax.hs
Original file line number Diff line number Diff line change
@@ -106,6 +106,7 @@ myFunc arg1 arg2 = myVal arg2 arg1 -- function declaration
myVal = myFunc -- value declaration

f $ x = f x -- infix declaration
quotedInfix = 42 `mod` 6 -- back-quoted infix operations
compose f g = \x -> f (g x) -- lambdas / anonymous functions

id :: a -> a -- with type signature (currently ignored)
@@ -117,7 +118,7 @@ id x = x
data Tree a = Leaf -- data type declaration
| Branch (Tree a) a (Tree a)

-- sequence a b = #(__Seq) a b -- coming soon: Haskell's `seq` statement
sequence a b = seq a b -- Haskell's `seq` statement

-- if-statements
myIf b e1 e2 = if b then e1 else e2
@@ -158,7 +159,8 @@ main = do -- force type-checking + compilation of everything in this file
return, bind, doNotation, arrayOperations,
exceptions, throwException, exceptionHandler, handleException,
performFFI, printAction, readArgumentAction,
myFunc, myVal, id, myIf, myLet, isEmptyList, isEmptyTree, true
myFunc, myVal, quotedInfix, compose, id, sequence,
myIf, myLet, isEmptyList, isEmptyTree, true
)
Ret ()

0 comments on commit ba9f012

Please sign in to comment.