У меня есть функция, которая создает кортеж после вычисления, но я хотел бы записать его в файл.
Я знаю, как записать в файл, используя writeFile
, но не знаю, как объединить вычисления и монады IO вместе в сигнатуре типа.
Это мой код.
invest :: ([Char]->Int->Int->([Char], Int) )
-> [Char]->Int->Int->([Char], Int)
invest myinvest x y = myinvest x y
myinvest :: [Char]->Int->Int->([Char], Int)
myinvest w x y
| y > 0 = (w, x + y)
| otherwise = error "Invest amount must greater than zero"
where
У меня есть функция, которая вычисляет максимальное значение из списка, но я хочу, чтобы эта функция получала входные данные из файла, а затем выполняла вычисление максимального значения.
maximuminvest :: (Ord a) => [a] -> a
maximuminvest [] = error "Empty Invest Amount List"
maximuminvest [x] = x
maximuminvest (x:xs)
| x > maxTail = x
| otherwise = maxTail
where maxTail = maximuminvest xs
Пожалуйста, помогите.
Благодарю.
[Изменить]
- Мой новый вопрос ниже.
Первый и второй вопрос можно решить с помощью композиции функций, но когда я пытаюсь это сказать, несоответствие типов.
Я проверил это, но не смог найти никаких ошибок.
invest :: ( [Char]->Int->Int->([Char], Int) ) -> [Char]->Int->Int-> ([Char], Int)
invest theinvest x y = theinvest x y
theinvest :: [Char]->Int->Int-> ([Char], Int)
theinvest w x y | y > 0 = (w, x + y)
| otherwise = error "Invest amount must greater than zero"
savefile :: ([Char], Int) -> IO()
savefile (x, y) = do
let name = fst (x, y)
let temp = snd(x, y)
let amount = show temp
writeFile "C:\\Invest.txt" (name ++ " " ++ amount)
test = savefile . theinvest "asd" 1234 234
Сообщение об ошибке
ERROR - Type error in application
* Expression : savefile . invest theinvest "234" 234 234
Term : invest theinvest "234" 234 234
Type : ([Char],Int)
* Does not match : a -> b
Пожалуйста, помогите. Мой тип возврата - ([Char],Int)
. Почему это жалоба как a -> b
? Спасибо
Я решаю это с помощью команды вроде savefile (invest theinvest "asd" 12 12), но почему оператор не работает?
Мой четвертый вопрос: у меня есть что-то вроде этого ["Питер", "1000", "michell", "2000", "Келли", "3000"], и я хотел бы преобразовать в [(" peter ", 1000), (" michell ", 2000), (" kelly ", 3000)]
Чтение содержимого файла в порядке, но я хочу отфильтровать строку и получить только номер. Например, файл с именем «peter 100 \ nasd 200»
Я хотел бы отбросить алфавит и оставить здесь целое число.
Я просто хочу, чтобы [100, 200] был аргументом функции.
Пожалуйста, помогите.
Спасибо.