Я пытался выполнить поиск по списку пар, в которых может быть элемент ("$", Undefined) в произвольном месте. Я хотел ТОЛЬКО искать часть списка перед этим специальным элементом, поэтому я попробовал что-то вроде этого (уже есть предназначен для того, чтобы взять элемент n и список xs в качестве аргументов):
checkNotSameScope :: Env -> VarName -> Expr -> Expr
checkNotSameScope (xs:("$", Undefined):_) n e = if alreadyThere n xs then BoolLit False
else BoolLit True
Но это не работает; компилятор, похоже, указал, что (xs: ..) имеет дело только с ОДНИМ значением, предшествующим моему списку. Я не могу использовать : для указания первого фрагмента списка; только один элемент. Оглядываясь назад, это имеет смысл; иначе как бы компилятор знал, что делать? Добавление «s» к чему-то вроде «x» волшебным образом не создает несколько элементов! Но как я могу обойти это?