我有一个'压缩'的值流,附加了该值的出现次数,例如:
let a = [ (),1; (),4; (),3;]
Run Code Online (Sandbox Code Playgroud)
我想'解压缩'那个序列并发出原始序列.我可以定义一个重复组合来产生!为此
let rec repeat avalue n = seq { if n > 0 then
yield avalue; yield! repeat avalue (n-1) }
let b = seq { for v,n in a do
yield! repeat v n } |> Seq.toList
Run Code Online (Sandbox Code Playgroud)
有没有办法以组合的形式表达内联?
let c = a |> Seq.XXX(fun e -> ...)
Run Code Online (Sandbox Code Playgroud) 我有一个包含customerid和列表的数据框.我想合并那些与同一客户有关的清单.
library(plyr)
subsets <- list(c("a", "d", "e"), c("a", "b", "c", "e"))
customerids <- c(1,1)
transactions <- data.frame(customerid = customerids,subset =I(subsets))
> transactions
customerid subset
1 1 a, d, e
2 1 a, b, c, e
Run Code Online (Sandbox Code Playgroud)
如果我想将子集与ddply合并,我会得到一个扩展的结果
> ddply(transactions, .(customerid), summarise, subset=Reduce(union,subset))
customerid subset
1 1 a
2 1 d
3 1 e
4 1 b
5 1 c
Run Code Online (Sandbox Code Playgroud)
虽然我希望所有的结果都在一排.
通过重写,我有一个简洁的语法(例如,没有调用同余属性),我可以证明:
-- * is associative
*-assoc : ? a b c ? (a * b) * c ? a * (b * c)
*-assoc zero b c = refl
*-assoc (succ a) b c rewrite *+-dist b (a * b) c | *-assoc a b c = refl
Run Code Online (Sandbox Code Playgroud)
但是,我的小脑子可以更好地解析这个证明
--written in equational style
*-assoc' : ? a b c ? (a * b) * c ? a * (b * c)
*-assoc' zero b c = refl
*-assoc' (succ a) …Run Code Online (Sandbox Code Playgroud) 在定义函数的代码中,有一个奇怪的"模式匹配" (cradleRootDir -> projdir)
我想这意味着应用内联函数并将结果绑定到名称projdir.
这个结构的名称是什么?
withGhcModEnv' :: (IOish m, GmOut m) => (FilePath -> (Cradle -> m a) -> m a) -> FilePath -> Options -> ((GhcModEnv, GhcModLog) -> m a) -> m a
withGhcModEnv' withCradle dir opts f =
withCradle dir $ \crdl ->
withCradleRootDir crdl $
f (GhcModEnv opts crdl, undefined)
where
withCradleRootDir (cradleRootDir -> projdir) a = do
cdir <- liftIO $ getCurrentDirectory
eq <- liftIO $ pathsEqual projdir cdir
if not eq
then …Run Code Online (Sandbox Code Playgroud) 在下面的代码中,GHC在实例的定义中找不到Functor Monoidal实例.
为什么不GHC推断出给定的Applicative约束条件,则Functor 有是已经什么地方?(这个推理'能力'有名字吗?)
import Prelude hiding (Applicative (..), Monad (..))
class Functor f => Applicative f where
pure :: a -> f a
(<*>) :: f (a -> b) -> f a -> f b
class Functor f => Monoidal f where
unit::f ()
(*) ::f a -> f b -> f (a,b)
instance Applicative f => Monoidal f where
unit = pure ()
a * b = undefined
Run Code Online (Sandbox Code Playgroud)
我知道当然Functor f …
类型是否通用取决于绑定的存在与否。这可能会导致意外故障。
这是正常行为吗,有什么原因吗?
{-# LANGUAGE RankNTypes #-}
data IFix0 f a = IFix0 ( f (IFix0 f) a ) | In0 a
msfcata0_OK :: (forall r. (a -> r a) -> (r a -> a) -> f r a -> a) -> (forall z. IFix0 f z) -> a
msfcata0_OK f = go where go (IFix0 x) = f In0 go x
go (In0 v) = v
msfcata0_KO :: (forall r. (a -> r a) -> (r a -> a) -> …Run Code Online (Sandbox Code Playgroud) 无论如何要欺骗haskell(原始haskell?源插件?任何东西?)以获得类型类如何派生的证明树?
我想要什么,使用下面的例子说:
**Diff**
-- --
Id Id
---- ----------
Unit Prod Id Id
---------------------
Sum Unit (Prod Id Id)
Run Code Online (Sandbox Code Playgroud)
**Diff**
-- --
Id Id
---- ----------
Unit Prod Id Id
---------------------
Sum Unit (Prod Id Id)
Run Code Online (Sandbox Code Playgroud) 我正在使用fsharp powerpack示例中提供的MiniCSVTypeProvider.
不幸的是,它认为提供的值是浮动的,而我的是各种(变化的)格式.因此,我重写了MiniCsvType提供程序,以便始终提供字符串,将解析工作留给调用者.
但由于某些奇怪的原因,在解除引用旧DLL并包含对新DLL的引用之后,它使用旧类型提供程序继续提供浮动.我不得不更改程序集和类的名称以使VS刷新它.
有没有其他方法可以撤销/重置以前的类型提供程序,以便VS将更改考虑在内?
我有一些xUnit测试失败的常见
Could not load file or assembly 'FSharp.Core, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies.
The system cannot find the file specified.
Run Code Online (Sandbox Code Playgroud)
为了执行机器范围的重定向,我添加到文件中
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a"
culture="neutral"/>
<bindingRedirect oldVersion="4.0.0.0" newVersion="4.3.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
Run Code Online (Sandbox Code Playgroud)
你有更好的方法来处理4.0/4.3问题吗?
来形容免费单子的一种方式是说,这是一个最初在endofunctors的类别(某些类别的幺C),其对象是endofunctors从C到C,箭头是它们之间的自然变换.如果我们C要Hask的是endofunctor所谓Functor在Haskell,这是由函子* -> *,其中*代表的对象Hask
通过initiality,从endofunctor任何地图t到幺m在End(Hask)诱导从地图Free t到m.
所述否则,从算符任何天然转化t到单子m诱导从天然转化Free t到m
我原以为能够编写一个函数
free :: (Functor t, Monad m) => (? a. t a ? m a) ? (? a. Free t a ? m a)
free f (Pure a) = return a
free f (Free (tfta :: t …Run Code Online (Sandbox Code Playgroud) haskell ×5
f# ×3
.net ×1
agda ×1
free-monad ×1
monads ×1
plyr ×1
polymorphism ×1
r ×1
typeclass ×1