Mercurial > repos > other > SevenLanguagesInSevenWeeks
changeset 95:83b4f23b9df8
First successful attempt at a Haskell monad for hashtable lookup
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Sun, 30 Jun 2019 15:10:23 +0100 |
parents | eb868f089bd1 |
children | f548c8460d15 |
files | 7-Haskell/day3.hs |
diffstat | 1 files changed, 32 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/7-Haskell/day3.hs Sun Jun 30 15:10:23 2019 +0100 @@ -0,0 +1,32 @@ +-- 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" + 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 \ No newline at end of file