Вы можете просто использовать идентификатор переменной , переменная не указывает какой-либо шаблон, поэтому вы можете написать его следующим образом:
readDataRaw::String -> [Maybe Int]
readDataRaw (x:xs) = go [] [](x:xs) where
go _ ls [] = ls
go small big (x:xs) = case x of
'}' -> big
',' -> go [] ((readMaybe small::Maybe Int):big) xs
<b>c</b> -> go [] c:small big xs
Выше, однако, есть некоторые ошибки, и неполныеузоры.Например, в readDataRaw
вы указываете только шаблон (x:xs)
в заголовке, тогда как, строго говоря, возможно, что вы вызываете функцию с пустым списком []
.Он также «конфликтует» с (x:xs)
в шаблоне go
: это не проблема, поскольку Haskell принимает «ближайшую» переменную, поэтому определенную в предложении th3e go
, но вносит некоторую путаницу.В последнем случае (с c
вы также возвращаете go [] c : small big xs
, что будет интерпретироваться как (go [] c) : small big xs
, что не имеет особого смысла. Реорганизованная реализация может выглядеть следующим образом:
readDataRaw::String -> [Maybe Int]
readDataRaw = go [] [] where
go _ ls [] = ls
go small big (x:xs) = case x of
'}' -> big
',' -> go [] ((readMaybe small::Maybe Int):big) xs
<b>c</b> -> go (c:small) big xs
Но все же, это немного "некрасиво". Это отчасти потому, что неясно что вы хотите сделать.