2017-02-14 12 views
-4

Я ищу доступ к 3-му элементу в кортежей Haskell. Кортеж имеет тип (String, String, Int), и я хочу Int. Я попытался создать мои собственные способами, которые я видел в Интернете, в основном:Доступ к третьему элементу в тройной кортеж

get3rd (_,_,x) = x 

* Я также попытался с помощью объявления типа: (String, String, Int) -> Int и создания пользовательского тип для кортежа и используя это.

Это работает, если я ввожу кортеж, состоящий из целых чисел, но как только я поместил строки в эту ошибку: конструктор данных не имеет значения: Mary :: String * Mary - произвольная строка, я получаю ошибка для обеих введенных строк. Любая помощь была бы хорошей в решении этого!

+2

Это работает, поэтому ошибка, вероятно, связана с кодом, который вы нам не показывали. Что такое «Мария»? – E4z9

+7

Вы написали '(Mary, Mary, 1)' вместо '(« Mary »,« Mary », 1)'? – E4z9

+0

Yepp, попробовал оба – MandyLB

ответ

1

Если вам не нужно делать это часто, это

let (_,_,x) = someTuple 
in doSomething x 

или это

doSomething x 
where (_,_,x) = someTuple 

в значительной степени соответствует этому

get3rd (_,_,x) = x 
... 
doSomething (get3rd someTuple) 

но если вы имея дело с чем-то вроде вложенных кортежей, он может стать беспорядочным

+1

Правильно, но я сомневаюсь, что кому-то ясно, на каком уровне этого вопроса вы подразумеваете. – leftaroundabout