Ваш текущий вопрос на самом деле не о нескольких параметров, но разные предикаты для break
. Рассмотрим тип break
«S для второго:
break :: (a -> Bool) -> [a] -> ([a], [a])
Этот тип функции (a -> Bool)
называется предикат. Вы можете использовать все, что использует правый a
, и возвращает Bool
. Вот почему ваш первый код typechecks:
ghci> :t (== ' ')
(== ' ') :: Char -> Bool
Теперь, если вы хотите использовать несколько символов в качестве возможных символов разрыва, вам нужно использовать другую Char -> Bool
. Если символы фиксированы (и вы не имеете многие из них), вы можете использовать список [Char]
и elem
:
yourCharacters = [' ','\t','\n']
predicate :: Char -> Bool
predicate c = c `elem` yourCharacters
Мы можем использовать это в качестве предиката для break
:
myBreak = break (`elem` yourCharacters)
В этот пункт, вы можете также изменить myBreak
так, что она принимает список символов, в какой момент вы получите:
myBreak' :: [Char] -> [Char] -> ([Char], [Char])
myBreak' limiters = break (`elem` limiters)
-- myBreak' limiters str = break (`elem` limiters) str
НТН
'break (flip elem" \ t \ n ")'? – Zeta
Вы можете дать 'break' любую функцию для своего первого аргумента. Таким образом, вы можете просто создать новую функцию, которая является предикатом, который вы хотите, и передать его «break». –
@Zeta Да, это работает, но не могли бы вы немного объяснить это? – user8