Я думаю, что ваше явное объявление типа неверно. У вас есть:
lookup :: String -> [(String,String)] -> String
но я думаю, что это должно быть
lookup :: String -> String -> [(String,String)] -> String
На самом деле, после еще одного взгляда на это, похоже, что вы не используете второй параметр "у". Таким образом, вы можете удалить его и подчеркивание, как это
lookup :: String -> [(String,String)] -> String
lookup _ [] = "Not found"
lookup x zs = if (notFound x zs)
then "Not found"
else (head [b | (a,b) <- zs, (a==x)])
Это позволит вам сохранить объявление типа, которое у вас есть.