Какова цель использования «чистого» ключевого слова в примере учебника по конфликтам? - PullRequest
0 голосов
/ 16 октября 2019

На официальном сайте Clash есть следующий пример:

>>> sampleN @System 4 (register 0 (pure (8 :: Signed 8)))

Я знаю, что такое чистая функция, но почему это ключевое слово здесь? Если я удаляю его, я получаю сообщение об ошибке:

Clash.Prelude> sampleN @System 4 (register 0 (8 :: Signed 8))

<interactive>:2:32: error:
    * Couldn't match expected type `Signal System a'
                  with actual type `Signed 8'
    * In the second argument of `register', namely `(8 :: Signed 8)'
      In the third argument of `sampleN', namely
        `(register 0 (8 :: Signed 8))'
      In the expression: sampleN @System 4 (register 0 (8 :: Signed 8))
    * Relevant bindings include it :: [a] (bound at <interactive>:2:1)

Любая подсказка?

1 Ответ

4 голосов
/ 16 октября 2019

Signal имеет экземпляр Applicative, к которому принадлежит pure. pure :: a -> Signal dom a поднимает значение типа Signed 8 до Signal dom (Signed 8). Что в этом контексте объединяется с Signal System a, что приводит к Signal System (Signed 8).

Используемая ссылка: http://hackage.haskell.org/package/clash-prelude-1.0.0/docs/Clash-Signal.html

...