Функция, возвращающая элемент по заданному индексу - PullRequest
0 голосов
/ 07 мая 2020

Как я могу реализовать функцию, которая возвращает элемент ns из списка с такой подписью? Я знаю обычный способ с оператором !!, но вот тип Natural , поэтому Haskell не может сопоставить его с ожидаемым Int .

indexed :: Natural -> [a] -> a

Ответы [ 3 ]

1 голос
/ 07 мая 2020

Я предполагаю, что вы имеете в виду Numeri c .Natural package

Это немного похоже на хак, но вы могли бы сделать:

indexed :: Natural -> [a] -> a
indexed n xs = xs !! (fromInteger (toInteger n))
1 голос
/ 07 мая 2020

Может просто так:

import  Numeric.Natural

indexed :: Natural -> [a] -> a
indexed nat xs = (xs !! (fromIntegral nat))

Пробуем под ghci:

 λ> 
 λ> z = 0 :: Natural
 λ> :t z
z :: Natural
 λ> z
0
 λ> 
 λ> indexed z [1..3]
1
 λ>
1 голос
/ 07 мая 2020

Я предполагаю, что Natural равно Numeric.Natural. Тогда вы можете просто сделать

indexed :: Natural -> [a] -> a
indexed 0 (x:_) = x
indexed _ [] = error "OutOfRange"
indexed n (_:xs) = indexed (n-1) xs
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...