Несколько вещей здесь не так:
- Вам понадобится необходимо предложение else.
True
должен быть написан заглавными буквами.
inputIndex
всегда должен принимать два аргумента (сейчас это не так, в последнем случае).
Полагаю, вы хотите что-то подобное ...
inputIndex :: [String] -> [String] -> IO ()
inputIndex listx input = if inputIndex' listx input
then putStrLn ("ok")
else putStrLn ("not ok")
where
inputIndex' :: [String] -> [String] -> Bool
inputIndex' listx input = and [x `elem` listx |x <- input]
(Здесь я определил новую функцию с почти одинаковым именем, добавив простую / апостроф. Определив ее в предложении where
, она видна только внешней функции inputIndex
. вспомогательная функция, если хотите. Я мог бы также выбрать совершенно другое имя, но я не креативен.)
Вы также можете сократить это до следующего (что также является более общим):
allPresent :: (Eq t) => [t] -> [t] -> IO ()
allPresent xs ys = putStrLn (if and [y `elem` xs | y <- ys] then "ok" else "not ok")