Це питання не є суб'єктивним. Дуже специфічне дієслово використовується в посилальній книзі, і я хотів би зрозуміти, що означає це словосполучення, бо я боюся, що я щось нерозумію.
У розділі Learn You a Haskell наступний параграф - третій і останній, який містить "ми припускаємо *
".
data Barry t k p = Barry { yabba :: p, dabba :: t k }
А тепер ми хочемо зробити це екземпляром
Functor
.Functor
хоче типів,* -> *
алеBarry
не схожий на це. Що таке видBarry
? Що ж, ми бачимо, що він має три типи параметрів, так що це будеsomething -> something -> something -> *
. Можна з упевненістю сказати, щоp
це конкретний тип і, таким чином, має свого роду*
. Боk
ми, припустимо,*
і так подовжуючи,t
має свого роду* -> *
. Тепер давайте просто замінимо ці види на тіsomething
, які ми використовували в якості заповнювачів, і ми бачимо, що вони мають такий тип(* -> *) -> * -> * -> *
.
Чому ми взагалі щось припускаємо? Читаючи "ми припускаємо, що X (тобто ми припускаємо, що X є істинним)", мені природно думати, що ми також повинні розглядати випадок, що X є помилковим. У конкретному випадку прикладу, чи не могли t
бути добрі (* -> *) -> *
та k
добрі (* -> *)
? Якби це було так, то все , що t
і на k
самому справі були, по- t k
, як і раніше буде тип бетону, немає?
Я бачу, що весь рядок міркувань потім перевіряється на компілятор, але я не думаю, що компілятор передбачає . Якщо це так, я хотів би знати, що, якщо цього не стане, я знову боюся, що я пропускаю значення параграфа.
k :: L
будь-який видL
, покиt :: L -> *
. Однак компілятор повинен вибрати якийсь конкретнийL
або вдатися до полікінду. Полікінд був би найбільш загальним варіантом, але тут GHC вибираєL = *
(базовий Haskell не має полікінди, вони повинні бути включені як розширення). Оскільки він обирає щось, що є досить довільним, LYAH використовує слово "припустити" (AFAICT).