Я думаю, что вам, возможно, просто не хватает некоторых маленьких кусочков, которые связывают все это вместе.
Во-первых, у вас есть совершенно точный тип данных MyType
, который содержит строки:
data MyType = MyType String deriving (Show)
Теперь вы хотите написать функцию, которая просматривает список такого типа, печатая каждый элемент по мере его поступления.Мы делаем это с помощью рекурсии по типу данных list.
Поскольку списки имеют два регистра, пустой список []
и регистр cons (:)
, у нас есть две ветви:
display :: [MyType] -> IO ()
display [] = return ()
display ((MyType name):xs) = do
putStrLn name
display xs
Теперь, я думаю, вы, возможно, застряли, собирали данные такого типа.Вы уже знаете, как разобрать это с помощью сопоставления с образцом, и вы строите данные, используя почти тот же синтаксис.Вот список MyType
:
table =
[ MyType "john"
, MyType "don"
, MyType "eric"
, MyType "trevor"
]
Наконец, вы можете запустить вашу программу из main
main = display table
Обратите внимание, здесь нет классов типов, только алгебраические данныетипы (введено с data
).