可以使用“資料種類提升”在種類上定義一個函子
data Product m = E| I m | P (Product m, Product m)
它將一種型別映射m到具有 3 種型別的總和Product m型別,即空型別、一種型別m和一種型別(Product m, Product m)
*我們可以用型別族為這個函子定義一個代數
type family MHask (mp :: Product (*)) :: * where
MHask E = ()
MHask (P '(m, n)) = (MHask m, MHask n)
MHask (I m) = m
但是我們可以為這個函子定義代數類嗎?
class MK m where
--type To (Product m) :: m -- type family declaration should have form "type family To a"
type To :: Product m -> m
-- instance MonoidalK (*) where
-- -- type To = MonoidalHask -- type family ‘MonoidalHask’ should have 1 argument
-- -- type To m = MonoidalHask m -- Number of parameters must match family declaration; expected 0
-- type To = ?
uj5u.com熱心網友回復:
型別族有一個 arity,它是它可以“模式匹配”的引數的數量,它是通過將這些引數::放在其宣告的左側來指定的。
class MK m where
type To (x :: Product m) :: m
這實際上與
type family To (x :: Product m) :: m
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/431367.html
上一篇:在WPF中變形形狀
