Преобразование строки в список в новом типе

#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