Поля типа доступа в конструкторе данных haskell - PullRequest
0 голосов
/ 08 мая 2018

У меня вопрос, как мне получить доступ к определенным типам в конструкторе данных. Допустим, я получил этот пример кода

data Object = Object Type1 Type2 Type3 Type4
  deriving(Eq,Show)
type Type1 = Float
type Type2 = Bool
type Type3 = Int
type Type4 = String

и я определяю функцию с именем

construct = Object 5.6 True 10 "World"

Как я могу напечатать определенные типы из конструкции, например, я хочу напечатать "Мир" из конструкции, как я могу получить эту информацию.

Type4 construct 

не работает

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 13 мая 2019

Также линия

Object t1 t2 t3 t4 = construct

, кажется, распаковывает четыре поля. Я новичок в Haskell, так что я не знаю, является ли это документированным поведением или рекомендуемым методом (тип сопоставления с образцом?).

0 голосов
/ 08 мая 2018

С сопоставлением с шаблоном

Мы можем построить функцию, которая использует сопоставление с образцом:

objectType1 :: Object -> Type1
objectType1 (Object x _ _ _) = x

С синтаксис записи

Мы также можем определить тип данных с помощью синтаксиса записи :

data Object = Object {objectType1 :: Type1,
                      objectType2 :: Type2,
                      objectType3 :: Type3,
                      objectType4 :: Type4} deriving(Eq, Show)

Затем Haskell автоматически создаст геттеры, поэтому вы неявно создали такую ​​objectType1 функцию.

Мы также можем использовать такой синтаксис записи как « setter », например:

setObjectType1 :: Type1 -> Object -> Object
setObjectType1 t o = o { objectType1 = t}
...