Я хочу, чтобы это было: ["Hello, Just Simpson"]
Я предполагаю, что это опечатка, и вы хотите:
["Hello", Just "Simpson"]
Это, однако, не возможный. Список содержит элементы одного типа того же . Но здесь ваш список будет содержать String
и Maybe String
, что не имеет особого смысла.
Если вы хотите добавить к списку Just "Hello"
, вы можете использовать оператор секционирования здесь:
maybeStrings :: [Maybe String] -> [Maybe String]
maybeStrings s = <b>(</b>Just "Hello" <b>:)</b>
Если вы хотите преобразовать Just <i>x</i>
в строку "Hello, Just
, вы можете использовать отображение вроде:
maybeStrings :: [Maybe String] -> [String]
maybeStrings = map f
where f (Just x) = "Hello, " x
f Nothing = _
, но тогда вам нужно вернуть строку для Nothing
часть. Вы не можете хранить в списке как String
s, так и Maybe String
s.
Другой чувственный кандидат, рекомендованный @ dopamane , использует catMaybes :: [Maybe a] -> [a]
. Это займет список Maybe
с и Just
с, чтобы преобразовать его в список элементов. Таким образом, мы можем определить функцию:
import Data.Maybe(catMaybes)
maybeStrings :: [Maybe String] -> [String]
maybeStrings = map ("Hello, " ++) . <b>catMaybes</b>