2014-11-30 3 views
1

Я просматривал документацию «линзы», касающуюся призм, и я заметил строку в Control.Lens.Review, в которой говорится, что оператор проверки infix # 'обычно используется при использовании Prism как умного конструктор.'.Использование призмы в качестве умного конструктора

Это меня немного заинтриговало, потому что пример с _Left, один из конструкторов для типа данных «Либо», не казался интеллектуальным конструктором, насколько я понимаю интеллектуальных конструкторов (добавляя дополнительные ограничения на значения аргументов) , Поэтому я немного искал призраки как умные конструкторы, но на самом деле я не нашел никакого примера.

Есть ли кто-то, кто знает, что именно подразумевается под этим утверждением и может привести пример? Или, может быть, скажите, что мое определение интеллектуального конструктора, конечно, неверно.

ответ

2

Один вид типа Prism является почти изоморфизмом. Фактически, lens documentation говорит "It may help to think of this as a Iso that can be partial in one direction."

И не является ли частичное направление довольно хорошей аналогией для интеллектуального конструктора? Вы можете передать любой набор аргументов (которые соответствуют типу), но некоторые из них не смогут создать значение.

+0

Мне не хватает чего-то, что я думаю. Например, в типе «Литер String Int» притяжение _Left никогда не будет терпеть неудачу, если вы передадите ему правильный тип строки. Думаю, они всегда будут создавать ценность. Я не вижу, как _Left может защитить от недопустимых значений аргументов, поэтому я действительно не вижу, как какое-то значение аргумента не сможет создать правильный. Или я не должен фокусироваться на _Left? Или я неправильно истолковываю ваше использование «ценности»? – Kasper

+1

@ Kasper Вы правы, что направление пристрастности в 'Prism' не совпадает с использованием' review' как конструктора, который может выйти из строя. Может быть, лучше сказать, что он использует более широкое определение интеллектуального конструктора, а именно функцию, возвращающую значение определенного типа. Это значение почти бесполезно широко, но это не неслыханно. – Carl

Смежные вопросы