我具备的功能: map(map(fn x =>[x])) [[],[1],[2,3,4]];
主要生产: val it = [[],[[1]],[[2],[3],[4]]]
我不明白这个功能是如何工作的。每个映射函数都不需要函数和列表吗?似乎没有足够的参数来实际执行。 如果我运行: map(fn x =>[x]) [[],[1],[2,3,4]];
我得到: val it = [[[]
缓存内部想象这样的功能: bar :: Foo -> A -> B -> C -> IO()
即函数执行一些IO使用Foo和其他值的东西。该Foo值必须被传递到bar,并且可以从IO从这个被检索:现在 foo :: X -> IO Foo
,A,B,C和X都是纯纯值。使用X值 bar :: X -> A -> B -> C -> IO()
而且Foo将在bar功能产生:我宁愿喜欢这样的
我一直在检查Lens的类型以了解它,并且无法找出在那里部分应用的结果类型导致的类型。 初始型是这样的:type RefF a b = forall f. Functor f => (b -> f b) -> (a -> f a) 应用于Identity算符上述类型变成这样: (b -> Identity b) -> (a -> Identity a)
它们的修改函数的定义是这样的: modif
显然有点心不在焉,我写了something like如下: {-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE TypeFamilies #-}
class Foo f where
type Bar f :: *
retbar :: Bar f -> IO f
type Baz f = (Foo f, Eq f)