aboutsummaryrefslogtreecommitdiff
path: root/ch10_10.1-i.hs
diff options
context:
space:
mode:
authorPaul Oliver <contact@pauloliver.dev>2025-01-03 11:01:20 -0800
committerPaul Oliver <contact@pauloliver.dev>2025-01-05 09:59:10 -0800
commit6a0d7f5c434c3564d0119befb6799fd77581050a (patch)
treef20bc998290211d2a895523417ad32e297b31af0 /ch10_10.1-i.hs
InitialHEADmaster
Diffstat (limited to 'ch10_10.1-i.hs')
-rw-r--r--ch10_10.1-i.hs12
1 files changed, 12 insertions, 0 deletions
diff --git a/ch10_10.1-i.hs b/ch10_10.1-i.hs
new file mode 100644
index 0000000..d76160f
--- /dev/null
+++ b/ch10_10.1-i.hs
@@ -0,0 +1,12 @@
+{-# LANGUAGE FunctionalDependencies #-}
+
+-- Exercise 10.1-i
+-- Defunctionalize `listToMaybe :: [a] -> Maybe a`.
+newtype ListToMaybe a = ListToMaybe [a]
+
+class Eval l t | l -> t where
+ eval :: l -> t
+
+instance Eval (ListToMaybe a) (Maybe a) where
+ eval (ListToMaybe []) = Nothing
+ eval (ListToMaybe (x : _)) = Just x