相关疑难解决方法(0)

与Haskell中的类型类相比,Clojure中的协议和多方法对多态性的影响力较小的原因是什么?

更广泛地说,这个问题是关于表达问题的各种方法.我们的想法是,您的程序是数据类型和操作的组合.我们希望能够在不重新编译旧类的情况下添加新案例.

现在,Haskell 对TypeClass表达式问题有一些非常棒的解决方案.特别是 - 我们可以这样做:

class Eq a where
  (==) :: a -> a -> Bool
  (/=) :: a -> a -> Bool


member :: (Eq a) => a -> [a] -> Bool
member y [] = False
member y (x:xs) = (x == y) || member y xs
Run Code Online (Sandbox Code Playgroud)

现在Clojure中还有多方法 -所以你可以这样做:

(defmulti area :Shape)
(defn rect [wd ht] {:Shape :Rect :wd wd :ht ht})
(defn circle [radius] {:Shape :Circle :radius radius})
(defmethod area …
Run Code Online (Sandbox Code Playgroud)

haskell protocols clojure typeclass multimethod

24
推荐指数
2
解决办法
1765
查看次数

(Haskell的)语义受推断类型(返回类型多态)的影响是什么意思?

评论员写道:

最后,给定足够的宏魔法可以做到这一点......但现在可能比在Clojure上实现Haskell风格类型系统更省力.类型化的Clojure可能是一个很好的模型,除了它已被明确设计,以便Clojure的语义不受推断类型的影响.这正是返回类型多态中发生的事情,因此在Typed Clojure中显然是不可能的.

我的问题是 - 什么意思(Haskell的)语义受推断类型(返回类型多态)的影响?

polymorphism haskell types clojure clojure-core.typed

14
推荐指数
1
解决办法
399
查看次数