我有这些类(和函数):
template <class A>
class Factory{
public:
A (*binOp(void))(A,A);
};
int sum(int a, int b){
return a + b;
}
class IntFactory : public Factory<int>{
public:
int (*binOp(void))(int,int){
return ∑
}
};
template <class A>
class SpecializedList{
protected:
List<A>* list;
Factory<A>* factory;
public:
SpecializedList(List<A>* list,Factory<A>* factory){
this -> list = list;
this -> factory = factory;
}
A sum(){
return (list -> foldLeft(factory -> zero(), factory -> binOp()));
}
};
// in main
SpecializedList<int>* …Run Code Online (Sandbox Code Playgroud) 我不明白为什么这个代码类型检查:
error1 :: ErrorT String (ReaderT Int IO) Int
error1 = asks id
Run Code Online (Sandbox Code Playgroud)
fyi,asks有这种类型:
asks :: Monad m => (r -> a) -> ReaderT r m a
Run Code Online (Sandbox Code Playgroud)
另一方面,我能够理解,这个代码类似于:
reader1 :: ReaderT Int IO Int
reader1 = asks id
Run Code Online (Sandbox Code Playgroud)
id有类型,a -> a并且有一个Monadfor 的实例IO,因此编译器可以推断出类型.这对我来说很清楚.
该ErrorT是NEWTYPE和Haskell的规范状态,(约newtypes部分):
...它创建了一个必须明确强制转换为原始类型的独特类型......
根据我的理解,我应该能够得到相同的类型中error1 唯一明确,具有一定的胁迫与此类似:
reader2 :: ReaderT Int IO (Either String Int)
reader2 = fmap (\i -> Right i) reader1
error2 :: ErrorT …Run Code Online (Sandbox Code Playgroud) 可以重新绑定(>> =)并使用显式字典传递返回monad,如下所示:
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE RebindableSyntax #-}
module Lib where
import Prelude hiding ((>>=), return)
data MonadDict m = MonadDict {
bind :: forall a b. m a -> (a -> m b) -> m b ,
ret :: forall a. a -> m a }
(>>=) :: (MonadDict m -> m a) -> (a -> (MonadDict m -> m b)) -> (MonadDict m -> m b)
return :: a -> (MonadDict m -> m a)
monadDictIO …Run Code Online (Sandbox Code Playgroud) 如何在haskell中将Data.Map映射Int传递给[Char]?函数头如何?我们假设函数将返回一个int
import qualified Data.Map as M
someFunction :: <insert your answer here> -> IntRun Code Online (Sandbox Code Playgroud) 我创建了一个简单的maven 109项目 - maven-archetype-quickstart.
然后,添加pom.xml到derby的依赖项.
当我运行时mvn dependency:tree,我看到,正确解析了依赖:
[INFO] \- org.apache.derby:derby:jar:10.8.1.2:compile.
但是当我看到生成的包时mvn package,它只有3.2kB而且依赖性不存在.为什么?这个怎么运作?