我试图State
在一个新类型中隐藏monad 的类型参数,但是我很难将存在的限定s
与g
要提供的一致evalFoo
.我已经试过ExistentialQuantification
,GADTs
和RankNTypes
,但有这些扩展是如何工作的一个公认非常缺乏了解.
惯用的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) 我的目标是编写一个函数,该函数返回调用它的实例化类的地址.
我最初的猜测是
回来了
但这并没有产生任何好结果.
任何和所有建议都非常感谢!谢谢!
我对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) sapply
图书馆里有类似的东西吗multicore
?或者我必须这样做unlist(mclapply(..))
才能实现这一目标?
如果它不存在:原因是什么?
提前致谢,如果这是一个愚蠢的问题,抱歉!
一段时间以来,我一直在努力在Haskell的类型系统中表达某种模式.我甚至很难解释它(我想我不能很好地理解它的问题),但是这里去了!(并提前感谢任何能够理解并回答我的问题的勇敢的冒险家!)
让我们假设我们有两种不同的容器类型,ContF
并且ContD
每种容器类型只是一个ADT ,它们分别保持单个值Float
和Double
(在这个例子中它们也可能是新类型).
我们想要编写一个适用于任何一种类型的多态函数.也许它提取值并将其加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) 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) 我有一个模板linkedList,我想为...动态创建“头”指针
我似乎无法让任何语法工作..我最好的猜测是:
linkedList<int>** ptr;
ptr = new (linkedList<int>*)[1];
Run Code Online (Sandbox Code Playgroud)
但它不起作用。我对 C++ 相当陌生,因此感谢您的帮助!谢谢!