我想解决以下问题 - 给定所有选择器(e^i_n)和一些布尔函数({f_1, f_2, f_n})枚举闭包中的n个参数的所有函数(在[f_1,f_2,.. f_n] )。 所以,我实现了BooleanFunctionClass和existencial BooleanFunction类型。 他们是哈斯克尔的狂妄精神吗? class BooleanFunctionClass a where
我需要一个地图,可以包含任意值,只要它们的类型相同类型类。我的第一个幼稚的做法是这样的: type HMap = forall a . MyClass a => M.Map Int a
,但它似乎并没有工作:下面的代码给出了一个编译错误: testFunction :: (forall a . MyClass a => M.Map Int a) -> Int -> IO()
testFunc
让测试施工简单: case class ListRef (list : List[_]) extends ref.WeakReference(list)
它提供了错误: <console>:8: error: illegal inheritance;
self-type ListRef does not conform to scala.ref.WeakReference[List[_$1]
原来,尽管存在非常简单的想法,但使用existential/rank-n类型的确很难。 为什么要将存在类型打包成data类型是必要的? 我有以下简单的例子: {-# LANGUAGE RankNTypes, ImpredicativeTypes, ExistentialQuantification #-}
module Main where
c :: Double
c = 3
-- M
对象的集合类型推断考虑下面的类定义: class Person[+T <: Person[T]]
class Student() extends Person[Student]
class Professor() extends Person[Professor]
我想与学生名单和教授: val persons = List(new Student(), new Professor())