可能重复:
What's the “|” for in a Haskell class definition?MonadState的语法类型类声明
我是很新,哈斯克尔。在documentation of MonadState我看到以下内容:
class Monad m => MonadState s m | m -> s where
get :: m s
put :: s -> m()
什么是| m -> s
语法吗?
可能重复:
What's the “|” for in a Haskell class definition?MonadState的语法类型类声明
我是很新,哈斯克尔。在documentation of MonadState我看到以下内容:
class Monad m => MonadState s m | m -> s where
get :: m s
put :: s -> m()
什么是| m -> s
语法吗?
它被称为函数依赖关系或简称fundep。语法
class Monad m => MonadState s m | m -> s where
手段,仅存在一个用于每个m
或实例 - 换句话说,如果m
是已知的,该编译器可以推断的s
形式的类型。使用fundeps使编码变得更容易,因为编译器可以推断更多。
感谢您的快速和简洁的答案。我搜索了“Haskell函数依赖”,现在正忙于阅读http://www.haskell.org/haskellwiki/Functional_dependencies,希望能够详细阐述! – jchl
事实确实如此。搜索SO时我没有发现这个问题。很难搜索“|”字符,当你不知道它叫什么:) – jchl
确实如此。顺便说一句,这需要一个语言扩展,如果您尝试编译这样一个没有任何编译器标志的定义,GHC会说'类'C'中的Fundeps(使用-XFunctionalDependencies以允许fundeps)''。模块文档还指定了所需的扩展名。要了解如何搜索,请记住一些事项。 :] –