Функция фильтра Haskell для строк - PullRequest
1 голос
/ 29 апреля 2011

Есть ли способ использовать функцию фильтра в строках следующим образом:

filter (=="!") "!!some!!_!!string!!"

должно выдать "some_string" (случай выше).Прямо сейчас все, что я получаю, - это ошибка типа:

Couldn't match expected type `[Char]' against inferred type `Char'

Если я изменю тип аргумента второго фильтра на ["!! some !! _ !! string !!"], ошибка типа исчезнет, ​​новыводится только пустой список.(Не совсем то, что я хочу)

Я думал, что строки были списками, но, очевидно, "!! some !! _ !! string !!"не рассматривается как список, а как символ.

Кто-нибудь намекает на кого-то?

1 Ответ

10 голосов
/ 29 апреля 2011
Prelude> filter (/='!') "!!some!!_!!string!!"
"some_string"

Тип filter равен (a -> Bool) -> [a] -> [a].Поскольку вторым аргументом является String = [Char], что означает [a] = String = [Char], мы заключаем, что a должен быть Char.Поэтому функция должна принимать Char в качестве входа.Поэтому вам нужно использовать '!', а не "!".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...