帮助编写单调类型(相关类型类?)
-
25-10-2019 - |
题
我想编写一个单调类型类,该类将指定DSL(特定于域)Monad的一些基本操作。
class Monad 𝔪 => MyDSLMonad 𝔪 where
type ExprTyp 𝔪 :: * -> *
var :: String -> ExprTyp 𝔪 α -> 𝔪 (ExprTyp 𝔪 α)
在哪里 ExprType
指示表达式类型,并 var
将引入新的变量声明。
这个想法是我有一个基础单子 Base
实施 MyDSLMonad
, ,也许只是在类似的事情上起作用 Int
'沙 Bool
S,然后是更高级别的抽象将是Monad Transformers,可以在更高级别的类型上使用。
但是,实施 Base
' var
功能可能依赖于仅适用于 Int
'沙 Bool
的,并且需要某种类型的类别约束 var
功能。所以,我想要类似的东西
class Monad 𝔪 => MyDSLMonad 𝔪 where
type ExprTyp 𝔪 :: * -> *
class ValidTypes 𝔪
var :: ValidTypes 𝔪 α => String -> ExprTyp 𝔪 α -> 𝔪 (ExprTyp 𝔪 α)
instance MyDSLMonad Base where
class ValidTypes Base = MyClass
我意识到 rmonads
通过某种类型的情况会这样做,但是有更好的方法吗?另外,我有点喜欢拥有像Monad Transformers这样的 StateT
在常规的单调包中... :)
解决方案
还没有更好的方法。 Max Bolingbroke正在GHC建造这一点,希望它将以7.4到达。看 https://twitter.com/mbolingbroke, ,这是一个例子: http://hpaste.org/50576
不隶属于 StackOverflow