В Haskell я определил полиморфный тип данных Subst a
с одним конструктором S :: [(String, a)] -> Subst a
следующим образом:
data Subst a where
S :: [(String, a)] -> Subst a
deriving (Show)
Я хочу определить функцию get::String -> Subst a -> Maybe a
, которая принимает имя переменной и подстановку и возвращает значение, которое эта переменная должна заменить. Если подстановка не определена для переменной, функция не должна возвращать ничего.
Я пробовал следующее:
get :: String -> Subst a -> Maybe a
get str (S[]) = Nothing
get str (S((a,b):xs)) = if str == a then Just b
else get str xs
Но я получаю ошибки. Есть идеи, почему?
data Subst a = S [(String, a)] deriving Show
? - person Tikhon Jelvis   schedule 07.11.2012Map String a
вместо[(String,a)]
. Поиск списков занимает O(n), а поиск карты занимают O(log n). - person Petr   schedule 07.11.2012Map a b
имеет очень богатый API для поиска и вставки. - person Paul R   schedule 07.11.2012