#haskell
Вопрос:
Я пытаюсь создать новый тип данных, называемый BigNumber
, который состоит из списка его цифр. Но когда я пытаюсь создать функцию, которая получает строку и преобразует ее в a BigNumber
, я всегда получаю ошибку.
newtype BigNumber = Digits [Char] scanner :: String -gt; BigNumber scanner a = id a
Я пробовал использовать id
функцию и map
функцию, но ничего не работает.
Я всегда получаю ошибку
Couldn't match type ‘[Char]’ with ‘BigNumber’ Expected type: BigNumber Actual type: String • In the expression: id a In an equation for ‘scanner’: scanner a = id atypecheck(-Wdeferred-type-errors)
Комментарии:
1. ваше определение типа данных предполагает, что
BigNumber
именноDigits inputString
тамinputString
находитсяString
то, что задано функции в качестве аргумента.2.
newtype BigNumber = Digits [Char]
вводит в область действия конструкторDigits :: [Char] -gt; BigNumber
, так что, я думаю, вы хотитеscanner = Digits
. (Обратите внимание, чтоString
и[Char]
являются точно такого же типа)
Ответ №1:
Ошибка связана с тем, что функция «сканер» ожидает тип BigNumber и передается строковый тип.
Этот код должен работать:
newtype BigNumber = Digits [Char] scanner :: String -gt; BigNumber scanner = Digits