data Trie = [(String, Maybe Trie)]
то должен написать нечто:
data Trie = List Para | Nil
data Para = MkPara { fst :: String, snd :: Maybe Trie}
т.к. конструкторы [] и (,) с типами использовать не могу?
Можно обойтись и одним новым типом: data Trie = List String (Maybe Trie) | Nil Или даже data Trie = List {fst' :: String, snd' :: Maybe Trie} | Nil Отличие в том, что в вашем случае функции fst и snd тотальны (только их не получится использовать, так как они совпадают по именам с уже существующими), во втором случае их нет, а в третьем fst' и snd' — частичные функции (что не очень удобно). Но тут newtype всё равно лучше.
Обсуждают сегодня