小编Cir*_*dec的帖子

什么Haskell包有单元functor/monad?

我正在寻找单位functor/monad

data Unit a = Unit
Run Code Online (Sandbox Code Playgroud)

我可以轻松地重新创建它,但我宁愿不复制这个基本的东西.它曾经存在于Control.Functorcategory-extras包中(http://hackage.haskell.org/packages/archive/category-extras/0.1/doc/html/Control-Functor.html).我无法在Hoogle中找到它,或者在类别附加组件所在的地图中找到它(http://hackage.haskell.org/package/category-extras-1.0.2)

它似乎应该存在于变形金刚包中,因为Control.Monad.Identity它就在那里(它现在Data.Functor.Identity).

我能想出的最接近的现有库代码是

type Unit a = Constant () a
Run Code Online (Sandbox Code Playgroud)

使用Data.Functor.Constant变压器包.

monads haskell functor

5
推荐指数
1
解决办法
239
查看次数

尝试写回退实例时重叠实例错误

我正在尝试做类似于高级重叠技巧的事情来定义具有重叠行为的实例.我正在尝试为元组派生一个实例,fst如果存在,将使用该snd字段的实例,否则使用该字段的实例(如果存在).这最终导致关于重叠实例的看似错误的错误.

首先,我正在使用所有的厨房水槽,除了OverlappingInstances.

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE ScopedTypeVariables #-}
Run Code Online (Sandbox Code Playgroud)

我也使用poly-kinded Proxy和type level或者:||:.

import Data.Proxy

type family (:||:) (a :: Bool) (b :: Bool) :: Bool
type instance (:||:) False a = a
type instance (:||:) True a = True
Run Code Online (Sandbox Code Playgroud)

A是一个非常简单的课程.ThingA有一个A …

haskell typeclass type-families functional-dependencies overlapping-instances

5
推荐指数
1
解决办法
98
查看次数

传递 +RTS 选项以使用 stack exec 运行程序

如何将+RTS选项传递给使用 运行的程序stack exec

我已经添加-rtsoptsghc-options我的 cabal 文件中,并使用stack build. 如果我手动运行程序,普通和+RTS命令行参数都可以工作:

>.stack-work\dist\ca59d0ab\build\iterate-strict-exe\iterate-strict-exe.exe 25 +RTS -s
OK
   3,758,156,184 bytes allocated in the heap
         297,976 bytes copied during GC
         ...
Run Code Online (Sandbox Code Playgroud)

但是如果我stack exec只用普通选项运行它到达程序

>stack exec iterate-strict-exe -- 25 +RTS -s
OK
Run Code Online (Sandbox Code Playgroud)

其他不起作用的东西

如果我按照@epsilonhalbe 的建议调整参数的顺序,我会得到相同的结果。

>stack exec -- iterate-strict-exe 25 +RTS -s
OK
Run Code Online (Sandbox Code Playgroud)

似乎没有建议的--rts-options选项传递给stack exec.

>stack exec --rts-options "-s" -- iterate-strict-exe 25
Invalid option `--rts-options'

Usage: stack exec CMD …
Run Code Online (Sandbox Code Playgroud)

haskell haskell-stack

5
推荐指数
1
解决办法
1160
查看次数

haskell中原始递归函数的良好表示

在前一个问题答案中争论说,可以在Haskell中表示原始递归函数(PRF)和single或的单个额外值的并集undefined.这个论点是基于原始递归函数的公理结构的直接翻译; 它需要一些语言扩展和关于函数arity的类型级推理.是否有可能在更惯用的Haskell中表示一组等效的原始递归函数?

理想情况下,PRF的惯用语表示应能满足以下所有条件:

  • 提供一个Category实例
  • 关于函数arity的类型级推理不需要乱七八糟

除了原始递归的要求

  • 任何undefined输入功能都undefined适用于所有输入.这将PRF集限制为单个不可避免的额外值⊥,而不是包含多个部分递归函数.这意味着while循环或类似的部分递归函数的任何定义都应该是undefined.

我注意到原始递归函数的公理就像Category法则一样,Arrow没有arr(实际上它与之相反arr),而且只有自然数才有效的有限形式的循环.

recursion haskell

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

lambda演算的call-by-value和call-by-name解释器之间的区别

在另一个问题中,Bob 为无类型lambda演算提供了以下解释器.

data Expr = Var String | Lam String Expr | App Expr Expr

data Value a = V a | F (Value a -> Value a)

interpret :: [(String, Value a)] -> Expr -> Value a
interpret env (Var x) = case lookup x env of
  Nothing -> error "undefined variable"
  Just v -> v
interpret env (Lam x e) = F (\v -> interpret ((x, v):env) e)
interpret env (App e1 e2) = case …
Run Code Online (Sandbox Code Playgroud)

haskell lambda-calculus callbyname call-by-value

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

如何在subversion中追溯分支,或者如何记录合并补丁的恢复

我在项目上完成的部分开发工作无法部署,应该在一个单独的分支中完成.我已经合并了向后的更改(通过乌龟的"从此修订版还原更改"并仔细编辑),撤消应该在单独分支中的工作,并将此反向修补程序提交到主干.我现在想创建一个分支,其中包含上述补丁中未撤消的更改.这是我做的:

我在撤消修订之前的修订版中为新开发创建了一个新分支.

我通过合并tortoise SVN中的一系列修订将undo修订版合并到新的分支中.

我打开了更改日志,选择了"包括合并修订",并"还原此修订版本中的更改".这在我的工作副本中恢复了这些更改.现在我想要的是分支.我做出了这些改变.此提交列出"include merged revisions"下的撤消补丁; 我不相信它应该这样做; 这里好像有问题.关键可能是以这样的方式记录这个补丁(逆平方或原始修改的乘积),使得颠覆不知道为创建它而执行的操作.

然后,我通过相同的方法(合并一系列修订版)将所有更改从trunk合并到新分支中.这包括第二次原始的撤销补丁,使我的分支与trunk相同(现在将其列为包含的合并修订版三次).这不是理想的结果.

<编辑 - 解决方案>

以下是所需的行为,并且正常工作:

首先,我创建了一个包含文件夹标签,主干,分支的空存储库.在trunk中我创建了一个带有内容(rev1)的文件file.txt:

one
two
three
Run Code Online (Sandbox Code Playgroud)

然后编辑文件到

one
two_edit
three
Run Code Online (Sandbox Code Playgroud)

并签入(rev2).然后我在日志中选择了rev2并从此修订中选择了恢复更改并签入(rev3).该文件现在再次显示如下:

one
two
three
Run Code Online (Sandbox Code Playgroud)

然后我创建了一个从rev3到branches\b1 的trunk的分支(rev4,was5;这一步做了两个).在branches\b1中,文件如下所示:

one
two
three
Run Code Online (Sandbox Code Playgroud)

然后我将rev2从trunk转换为branches/b1忽略祖先(rev5).分支现在看起来像这样,现在纯粹的巧合是历史包含类似的东西:

one
two_edit
three
Run Code Online (Sandbox Code Playgroud)

我编辑主干(rev6)看起来如下:

one
two
three
four
Run Code Online (Sandbox Code Playgroud)

我将所有更改从主干合并到branches/b1(rev7).branches/b1现在正确看起来像:

one
two_edit
three
four
Run Code Online (Sandbox Code Playgroud)

</编辑 - 解决方案>

<编辑>

它应该如何工作

以下是所需的行为,如果按如下方式执行斜体步骤,则可正常工作:

首先,我创建了一个包含文件夹标签,主干,分支的空存储库.在trunk中我创建了一个带有内容(rev1)的文件file.txt:

one
two
three
Run Code Online (Sandbox Code Playgroud)

然后编辑文件到

one
two_edit
three
Run Code Online (Sandbox Code Playgroud)

并签入(rev2).然后我在日志中选择了rev2并从此修订中选择了恢复更改并签入(rev3).该文件现在再次显示如下:

one
two
three
Run Code Online (Sandbox Code Playgroud)

然后我创建了一个从rev2到branches\b1(rev4)的trunk分支.在branches\b1中,文件如下所示:

one
two_edit
three
Run Code Online (Sandbox Code Playgroud)

然后我将rev3从trunk合并到branches\b1(rev5),分支现在看起来像这样:

one
two
three
Run Code Online (Sandbox Code Playgroud)

我编辑分支3(rev6),好像我在这一点上分支.现在纯粹的巧合是历史包含类似的东西:

one
two_edit
three
Run Code Online (Sandbox Code Playgroud)

我编辑主干(rev7)看起来如下: …

svn tortoisesvn merge branch revert

3
推荐指数
1
解决办法
737
查看次数

对SignalR保持活跃的ping做出反应

SignalR服务器应用程序是否可以对SignalR内部使用的保持活动的ping作出反应?

我正在开发一个应用程序,它将为信号器客户端执行昂贵的查询.查询不会在与服务器连接的计算机相同的计算机上执行.查询运行起来很昂贵,并且易于重新启动,因此执行工作的工作人员不希望为断开连接的客户端或无法访问或关闭服务器工作; 他们希望保证客户仍在那里.这可以通过简单地让客户端以某个间隔ping Web服务器来完成,然后Web服务器可以将ping传递给worker.

public class PingedHub : Hub
{
    private readonly IPingListener _listener;

    public Hub(IPingListener listener)
    {
        _listener = listener;
    }

    public Ping()
    {
        _listener.Ping(Context.ConnectionId);
    }
}
Run Code Online (Sandbox Code Playgroud)

SignalR已经这样做了.为了检测丢失的连接,如果在一段时间内没有传输其他流量,SignalR会发送一个Keep-Alive ping GlobalHost.Configuration.KeepAlive.如果在更大的时间段内没有收到任何流量(由配置GlobalHost.Configuration.ConnectionTimeout,则会断开连接并断开连接)OnDisconnected.

是否有可能挂钩到现有系统以获得客户端连接的肯定保证,或客户端是否需要发送冗余ping?

signalr

3
推荐指数
1
解决办法
1858
查看次数

Haskell - 如何将具有不同依赖子集的组件连接在一起?

如何从需要各种基础结构功能子集的组件中集成应用程序?

有些将非常简单,只需要一个配置阅读器(我想只为每个业务功能公开一个相关的子集),也许还需要一个记录器.有些还需要连接到外部服务(使用缓存),我还希望与外部世界进行有限范围的可能交互.

我不想处理明确地将多个参数传递给这些函数,或者将它们包装成MonadIO能够执行所有操作的函数.

在Java应用程序容器中注入多个依赖项最接近的是什么?

haskell dependency-injection

3
推荐指数
1
解决办法
435
查看次数

Haskell记录语法并从文件中读取.记录语法的字符串.***例外:Prelude.read:没有解析

我有下面的记录语法.

type Title = String
type Author = String
type Year = Int
type Fan = String


data Book = Book { bookTitle :: Title
                 , bookAuthor:: Author
                 , bookYear  :: Year
                 , bookFans  :: [Fan]
                 }
                 deriving (Show, Read)


type Database = [Book]

bookDatabase :: Database 
bookDatabase = [Book "Harry Potter" "JK Rowling" 1997 ["Sarah","Dave"]]
Run Code Online (Sandbox Code Playgroud)

我想创建一个IO函数来读取books.txt文件并将其转换为类型数据库.我认为它需要与我下面的尝试相似.

main :: IO()
main = do fileContent <- readFile "books.txt";
          let database = (read fileContent :: Database)
Run Code Online (Sandbox Code Playgroud)

books.txt文件的格式是什么?

下面是我目前的books.txt内容(与bookDatabase相同).

[Book "Harry Potter" "JK …
Run Code Online (Sandbox Code Playgroud)

syntax haskell exception record

3
推荐指数
1
解决办法
360
查看次数

用fundeps捆绑约束

我有一个foo带有一连串限制的函数.当然这些约束必须出现在使用的函数的签名中foo,所以我要做的是将foo约束包装在类型同义词中FooCtx a b ... :: Constraint.举个例子,

foo :: (A a, B b, C c, ...) => a -> b -> c

bar :: (A a, B b, C c, ...) ...
bar = ... foo ...
Run Code Online (Sandbox Code Playgroud)

会成为

type FooCtx a b c ... = (A a, B b, C c, ...)
foo :: (FooCtx a b c) => a -> b -> c
bar :: (FooCtx a b c) => ...
Run Code Online (Sandbox Code Playgroud)

如果暴露了所有类型,这将非常有用.但是,我正在使用函数依赖项来生成约束列表中的某些类型,并且这些类型不会出现在签名中 …

haskell ghc type-constraints functional-dependencies

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

为什么IE 11中的$ .support.cors为false?

为什么$.support.cors false在IE 11中?我正在使用jquery 1.9.1($.fn.jquery == '1.9.1').

IE 11应该支持cors.

$.support.cors 在Chrome中使用相同版本的jquery是正确的.

jquery internet-explorer cors jquery-1.9 internet-explorer-11

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

Haskell - 将De Bruijn术语转换为Lambda术语(反之亦然)

我有一个编写Haskell程序的任务,该程序能够将De Bruijn术语转换为Lambda术语,并将Lambda术语转换为De Bruijn术语,并检查术语是否"关闭".

我不是在寻找某人为我做这项任务,但我们将非常感谢您的帮助!我对如何开始这个问题基本上一无所知.

所以,我最大的问题是:De Bruijn术语和Lambda术语之间的区别是什么?我理解变量"闭合"意味着什么,但我怎样才能在Haskell中检查它?

您可以想到的任何其他帮助将不胜感激.

这是完整的任务:

(通常)lambda术语定义为数据类型:

data Term = Var Int | Lam Int Term | App Term Term deriving (Eq, Show, Read)
Run Code Online (Sandbox Code Playgroud)

变量表示为整数.一个术语被称为关闭,如果每个iVar i都有Lam i <subterm>从它到根的路径上的from 一个术语,为它提供一个绑定.

De Bruijn术语被定义为数据类型:

data BTerm =BVar Int | BLam BTerm | BApp BTerm BTerm deriving (Eq,  Show, Read)
Run Code Online (Sandbox Code Playgroud)

编写一个Haskell函数db2lam,将de Bruijn项转换为lambda项.编写一个Haskell函数lam2db,将lambda项转换为Bruijn项.

编写一个isClosed测试lambda术语是否关闭的函数.编写一个函数isClosed来测试de Bruijn项是否已关闭.

选择以下两个科目之一:

a)为de Bruijn术语实现正常的顺序beta减少b)对(通常的)lambda术语实施正常的顺序beta减少

非常感谢您的帮助(大或小)!我正处于学习Haskell的早期阶段,很抱歉这么不确定!这个任务在这个时候是我的头脑.

lambda haskell

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

Java到Haskell - 计算器

我需要一些帮助将一些Java代码转换为Haskell.我设法做了一个愚蠢的版本.这个愚蠢的版本如下:

add :: Integer -> Integer -> Integer
add a b = a + b

sub :: Integer -> Integer -> Integer
sub a b = a - b

mult :: Integer -> Integer -> Integer
mult a b = a * b

divi :: Integer -> Integer -> Integer
divi a b = a `div` b
Run Code Online (Sandbox Code Playgroud)

因此,对于上述情况,如果我执行以下示例:

Prelude> add (mult 3 2) (sub 2 1)
Run Code Online (Sandbox Code Playgroud)

它将返回:

Prelude> 7
Run Code Online (Sandbox Code Playgroud)

我知道这有效,但我应该将以下Java代码转换为Haskell,并且我知道上面的代码与Java代码不同:

public class Calculator {
    static interface Expression { < T …
Run Code Online (Sandbox Code Playgroud)

math haskell types

0
推荐指数
1
解决办法
126
查看次数