我希望 Haskell 的編譯器能夠理解f v給出的是型別安全的Unfold v f(盡管這是一項艱巨的任務)。
data Sequence a = FirstThen a (Sequence a) | Repeating a | UnFold b (b -> b) (b -> a)
有什么方法可以在不添加額外模板引數的情況下封裝資料型別的通用模式。
(我知道使用惰性映射針對此特定情況的解決方案,但我正在尋求更通用的解決方案)
uj5u.com熱心網友回復:
您可以使用存在量化來實作:
data Sequence a = ... | forall b. UnFold b (b -> b) (b -> a)
不過,我不確定這是否比直接存盤展開結果的更簡單解決方案更能滿足您的需求:
data Stream a = Cons a (Stream a)
data Sequence' a = ... | Explicit (Stream a)
特別是,如果有人遞給您 a Sequence a,您無法對其中b包含的' 進行模式匹配,即使您認為您知道它們是什么型別。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/316842.html
標籤:哈斯克尔 函数式编程 模式匹配 代数数据类型 自定义数据类型
上一篇:更改控制器頁面的位置
