Я играю с Cofree
и не могу его перехватить.
Например, я хочу играть с Cofree [] Num
в ghci и не могу получить интересные примеры.
Например, если я создаю тип Cofree:
let a = 1 :< [2, 3]
Я ожидал бы extract a == 1
, но вместо этого получаю эту ошибку:
No instance for (Num (Cofree [] a0)) arising from a use of ‘it’
In the first argument of ‘print’, namely ‘it’
In a stmt of an interactive GHCi command: print it
И тип:
extract a :: (Num a, Num (Cofree [] a)) => a
Могу ли я получить несколько простых примеров, даже тривиальных, о том, как использовать Cofree с, скажем, функторами: []
или Maybe
или Either
, который демонстрирует
-
extract
-
extend
-
unwrap
-
duplicate
?
Cross Добавлено: https://www.reddit.com/r/haskell/comments/4wlw70/what_are_some_motivating_examples_for_cofree/
EDIT: руководствуясь комментарием Дэвида Янга, вот несколько лучших примеров, показывающих, где мои первые попытки были ошибочными, однако мне все же нравятся некоторые примеры, которые могут помочь интуиции Cofree:
> let a = 1 :< []
> extract a
1
> let b = 1 :< [(2 :< []), (3 :< [])]
> extract b
1
> unwrap b
[2 :< [],3 :< []]
> map extract $ unwrap b
[2,3]