You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1.7 KiB
1.7 KiB
27 Nonstrictness
27.5 Exercises: Evaluate
Excercise 1
const 1 undefined
(\a -> \b -> a) 1 undefined
(\b -> 1) undefined
1
Exercise 2
const undefined 1
(\a -> \b -> a) undefined 1
(\b -> undefined) 1
undefined
Exercise 3
flip const undefined 1
(\f -> \a -> \b -> f b a) const undefined 1
(\a -> \b -> const b a) undefined 1
(\b -> const b undefined) 1
const 1 undefined -- same as Exercise 1 now
Exercise 4 follows same principle as Exercise 3 but leads to Exercise 2.
Exercise 5 follows same pattern as before but where 1 is undefined.
Exercise 6
foldr const 'z' ['a'..'e']
const 'a' (foldr const 'z' ['b'..'e'])
'a'
Exercise 7
foldr (flip const) 'z' ['a'..'e']
(flip const) 'a' (foldr (flip const) 'z' ['b'..'e'])
const (foldr (flip const) 'z' ['b'..'e']) 'a'
foldr (flip const) 'z' ['b'..'e']
(flip const) 'b' (foldr (flip const) 'z' ['c'..'e'])
const (foldr (flip const) 'z' ['c'..'e']) 'b'
foldr (flip const) 'z' ['c'..'e']
(flip const) 'c' (foldr (flip const) 'z' ['d','e'])
const (foldr (flip const) 'z' ['d','e']) 'c'
foldr (flip const) 'z' ['d','e']
(flip const) 'd' (foldr (flip const) 'z' ['e'])
const (foldr (flip const) 'z' ['e']) 'd'
foldr (flip const) 'z' ['e']
(flip const) 'e' (foldr (flip const) 'z' [])
const (foldr (flip const) 'z' []) 'e'
foldr (flip const) 'z' []
'z'
27.14 Chapter Exercises
What will :sprint output
x = _
x = "1"
x = _
x = 1
x = _
x = _
Will printing this expression result in bottom
- No
- Yes
- Yes
- No
- No
- No
- Yes
Make the expression bottom
There are different ways of doing this. This is one of them:
x = undefined
y = "blah"
main = do
print (snd (x `seq` (x,y)))