Mercurial > repos > other > SevenLanguagesInSevenWeeks
view 7-Haskell/day3.hs @ 96:f548c8460d15
Add extra note about monadic-ness
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Sun, 30 Jun 2019 15:50:33 +0100 |
parents | 83b4f23b9df8 |
children | 85a5e9a6ef5c |
line wrap: on
line source
-- Monad tutorials: -- * https://wiki.haskell.org/All_About_Monads -- * https://www.haskell.org/tutorial/monads.html -- -- Pre-existing monads: https://hackage.haskell.org/package/base-4.12.0.0/docs/Control-Monad.html#g:2 module Day3 where -- Build a "hash" table (actually a simple lookup in a key-value list, because hashes are hard) hashtable = [ ("Phonetic", [ ("Latin", [ ("alpha", "a"), ("beta", "b"), ("charlie", "c") ]), ("Greek", [ ("alpha", "α"), ("beta", "β"), ("gamma", "γ") ]) ]) ] -- Note: We've got to put the key first so that we can call it in-fix and supply the search key -- Note 2: The input value has to be a "Just x" otherwise we can "Couldn't match type 'Maybe' with []" -- Note 3: I can't get anything out of this other than "Just <val>", even if I include ">>= return" -- Example usage: Just hashtable >>= ht_lookup "Phonetic" >>= ht_lookup "Greek" >>= ht_lookup "alpha" -- This is monadic because "Just hashtable >>= ht_lookup "Phonetic" >>= ht_lookup "foo" >>= ht_lookup "alpha" >>= return" doesn't explode but returns Nothing ht_lookup :: String -> [(String, a)] -> Maybe a ht_lookup _ [] = Nothing ht_lookup search_key ((key, value):tail) | search_key == key = Just value | otherwise = ht_lookup search_key tail