如何在 Haskell 中对类型类进行分组

白天国度

目的是使类型类约束代码更清晰。

type CanThrowDice = (Monad m, MonadIO m, Random a)

throwDice :: CanThrowDice m a => (a, a) -> m a
throwDice (r1, r2) = ...

而不是写:

throwDice ::  (Monad m, MonadIO m, Random a) => (a, a) -> m a
throwDice (r1, r2) = ...

我记得在某处看到过这种用法,但想不起来了。上面的代码警告我添加一些额外的编译指示,例如ConstraintKinds我无法使其工作。

威廉·范·翁塞姆

这是唯一缺少的是类型参数maConstraintKinds语言编译[GHC-DOC]

{-# LANGUAGE ConstraintKinds #-}

--                ↓ ↓ type parameters
type CanThrowDice m a = (Monad m, MonadIO m, Random a)

throwDice :: CanThrowDice m a => (a, a) -> m a
throwDice (r1, r2) = …

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章