Вы можете сделать это с помощью списочных представлений довольно легко:
locateAcct :: AcNo -> [(AcNo, Name, City, Amnt)] -> (AcNo, Name, City, Amnt)
locateAcct account db = head [ tup | tup@(ac, _, _, _) <- db, ac == account ]
Конечно, используя head
, мы открываем себя для возможности неудачного совпадения.Возможно, лучше было бы использовать что-то вроде безопасной библиотеки версии headMay, которая ничего не возвращает, если список пуст:
locateAcct :: AcNo -> [(AcNo, Name, City, Amnt)] -> Maybe (AcNo, Name, City, Amnt)
locateAcct account db = headMay [ tup | tup@(ac, _, _, _) <- db, ac == account ]
Теперь, если эта учетная запись несуществует, вы получаете Ничто вместо ошибки сопоставления с образцом.