小编ric*_*hie的帖子

GHC是否使用存在类型的动态调度?

下面的代码是否使用动态分派,因为它在C++或Java中被理解?

据我所知,在最后一行,编译器不可能在编译时知道调用(==)的实现,但代码编译并产生正确的结果.有人可以解释一下,这背后有什么样的实现(比如vptr)?

{-# LANGUAGE ExistentialQuantification #-}

data Value = A Int

data ForallFunc = forall a. Eq a => Forall (Value -> a) 

unpackA (A int) = int

equalityTest :: Value -> Value -> ForallFunc -> Bool            
equalityTest arg1 arg2 (Forall unpacker) =
  let a1 = unpacker arg1
      a2 = unpacker arg2 in
    a1 == a2
Run Code Online (Sandbox Code Playgroud)

haskell existential-type dynamic-dispatch

4
推荐指数
2
解决办法
168
查看次数