cha*_*ni2 11 formal-verification named-instance typeclass idris semigroup
我正在尝试在运算符和运算符上为我的自定义数据类型创建一个Semigroup
和VerifiedSemigroup
实例:Bool
&&
||
%case data Lógico = Cierto | Falso
(&&) : Lógico -> Lógico -> Lógico
(&&) Cierto Cierto = Cierto
(&&) _ _ = Falso
(||) : Lógico -> Lógico -> Lógico
(||) Falso Falso = Falso
(||) _ _ = Cierto
Run Code Online (Sandbox Code Playgroud)
所以我先制作一个命名实例为Semigroup
在 &&
运营商:
-- Todos
instance [TodosSemigroup] Semigroup Lógico where
(<+>) a b = a && b
Run Code Online (Sandbox Code Playgroud)
但在制作VerifiedSemigroup
实例时,如何告诉Idris使用TodosSemigroup
实例Lógico
?
instance [TodosVerifiedSemigroup] VerifiedSemigroup Lógico where
semigroupOpIsAssociative l c r = ?vsemigroupTodos
Run Code Online (Sandbox Code Playgroud)
该代码给我以下错误:
在详细说明类型时
Prelude.Algebra.Main.TodosVerifiedSemigroup
,方法semigroupOpIsAssociative
:无法解析类型类Semigroup Lógico
为此有一个新引入的机制,其中包含using
关键字:
%case data L\xc3\xb3gico = Cierto | Falso\n\n(&&) : L\xc3\xb3gico -> L\xc3\xb3gico -> L\xc3\xb3gico\n(&&) Cierto Cierto = Cierto\n(&&) _ _ = Falso\n\n(||) : L\xc3\xb3gico -> L\xc3\xb3gico -> L\xc3\xb3gico\n(||) Falso Falso = Falso\n(||) _ _ = Cierto\n\ninstance [TodosSemigroup] Semigroup L\xc3\xb3gico where\n (<+>) a b = a && b\n\ninstance [TodosVerifiedSemigroup] VerifiedSemigroup L\xc3\xb3gico using TodosSemigroup where\n semigroupOpIsAssociative l c r = ?vsemigroupTodos\n
Run Code Online (Sandbox Code Playgroud)\n