小编icz*_*icz的帖子

隐藏状态monad的类型参数

我试图State在一个新类型中隐藏monad 的类型参数,但是我很难将存在的限定sg要提供的一致evalFoo.我已经试过ExistentialQuantification,GADTsRankNTypes,但有这些扩展是如何工作的一个公认非常缺乏了解.

惯用的Haskell如何实现这种外观?谢谢!

{-# LANGUAGE GADTs #-}

import Control.Monad.State
import System.Random

data Foo a where
  Foo :: RandomGen s => State s a -> Foo a

evalFoo :: RandomGen g => Foo a -> g -> a
evalFoo (Foo m) g = evalState m g
Run Code Online (Sandbox Code Playgroud)

目标是实现这样的目标,但能够提供以下任何实例RandomGen:

myRNG :: Foo Double
myRNG = Foo $ do
  u <- state random
  return u

Prelude> evalFoo myRNG …
Run Code Online (Sandbox Code Playgroud)

haskell existential-type gadt

6
推荐指数
1
解决办法
136
查看次数

这个实例化的类的地址?

我的目标是编写一个函数,该函数返回调用它的实例化类的地址.

我最初的猜测是

回来了

但这并没有产生任何好结果.

任何和所有建议都非常感谢!谢谢!

c++

4
推荐指数
1
解决办法
4586
查看次数

函数始终返回数字(0)

我对R很新,所以如果这是一个简单易懂的问题我会道歉.我尝试了谷歌搜索,但找不到似乎完全相关的例子(大多数例子只有1个函数参数).

我有一个简单的函数,表示2维的基本线性模型:

y <- function(x, w) {
  temp <- w[0] + x*w[1]
  return(temp)
}
Run Code Online (Sandbox Code Playgroud)

当我以我期望的方式使用它时,我得到:

> y(1,c(-0.3,0.5))
numeric(0)
Run Code Online (Sandbox Code Playgroud)

当我尝试不正确的输入时,同样的事情!

> y(1,2)
numeric(0)
Run Code Online (Sandbox Code Playgroud)

最终,我的目标是能够有一个向量X,可以作为参数传入.例如:

> y(c(1,2,3,4),c(1,2))
Run Code Online (Sandbox Code Playgroud)

r

4
推荐指数
1
解决办法
1万
查看次数

多核::应用?

sapply图书馆里有类似的东西吗multicore?或者我必须这样做unlist(mclapply(..))才能实现这一目标?

如果它不存在:原因是什么?

提前致谢,如果这是一个愚蠢的问题,抱歉!

multicore r

4
推荐指数
1
解决办法
5029
查看次数

如何创建一个类型类来表示包含可提取的`Num`实例类型的容器?

一段时间以来,我一直在努力在Haskell的类型系统中表达某种模式.我甚至很难解释它(我想我不能很好地理解它的问题),但是这里去了!(并提前感谢任何能够理解并回答我的问题的勇敢的冒险家!)

让我们假设我们有两种不同的容器类型,ContF并且ContD每种容器类型只是一个ADT ,它们分别保持单个值FloatDouble(在这个例子中它们也可能是新类型).

我们想要编写一个适用于任何一种类型的多态函数.也许它提取值并将其加1(所以我们有一个Num约束).所以我们创建一个类型类,Cont带有一个提取值的函数.

我们不能只把num原型作为原型num :: (Num n) => t -> n,因为那样我们就会得到"无法推断Float~n"的编译时错误; 所以我们介绍一个相关的类型系列.

{-# LANGUAGE TypeFamilies #-}

data ContF = CF Float
data ContD = CD Double

class Cont t where
    type family ContNum t :: *
    num :: t -> ContNum t

instance Cont ContF where
    type ContNum ContF = Float
    num (CF f) = f

instance Cont ContD where
    type ContNum ContD …
Run Code Online (Sandbox Code Playgroud)

haskell typeclass type-families

4
推荐指数
1
解决办法
113
查看次数

使用postgresql-simple创建流媒体管道源

postgresql-simple 提供用于流式查询的功能,例如

fold 
  :: (FromRow row, ToRow params)
  => Connection -> Query -> params -> a -> (a -> row -> IO a) -> IO a
Run Code Online (Sandbox Code Playgroud)

我想创建一个充分利用流媒体的管道源.

mySource :: (FromRow row, Monad m) => Source m row
Run Code Online (Sandbox Code Playgroud)

不幸的是,因为IO出现在一个逆变的位置(我认为?)fold,我真的很难与这些类型斗争.以下类型检查,但在产生值之前折叠整个流.

getConduit :: Connection -> IO (C.ConduitM () Event IO ())
getConduit conn = fold_ conn queryEventRecord CL.sourceNull foo
  where
    foo :: C.ConduitM () Event IO () -> Event -> IO (C.ConduitM () Event IO ())
    foo cond evt …
Run Code Online (Sandbox Code Playgroud)

haskell conduit postgresql-simple

4
推荐指数
1
解决办法
321
查看次数

从指针到指针的 C++ 新指针?

我有一个模板linkedList,我想为...动态创建“头”指针

我似乎无法让任何语法工作..我最好的猜测是:

linkedList<int>** ptr;
ptr = new (linkedList<int>*)[1];
Run Code Online (Sandbox Code Playgroud)

但它不起作用。我对 C++ 相当陌生,因此感谢您的帮助!谢谢!

c++ pointers new-operator

2
推荐指数
1
解决办法
7838
查看次数