我正在使用haskell为依赖类型编程提供的工具.我已经将一个代表自然数的GADT推广到了那个级别,并且为了增加自然数而建立了一个类型族.我还制作了你的标准"婴儿的第一个依赖类型数据类型"向量,参数化其长度和它包含的类型.代码如下:
data Nat where
Z :: Nat
S :: Nat -> Nat
type family (a :: Nat) + (b :: Nat) :: Nat where
Z + n = n
S m + n = S (m + n)
data Vector (n :: Nat) a where
Nil :: Vector Z a
Cons :: a -> Vector n a -> Vector (S n) a
Run Code Online (Sandbox Code Playgroud)
此外,我做了一个append函数,它采用m向量,一个n-vetor并返回一个(m + n) - 向量.这可以和人们希望的一样有效.然而,只是为了它,我试图翻转它,所以它返回一个(n + m) - 矢量.这会产生编译器错误,因为GHC无法证明我的添加是可交换的.我还是比较新的打字家庭,所以我不知道如何自己写这个证明,或者如果你甚至可以用haskell做的话.
我最初的想法是以某种方式利用类型相等约束,但我不确定如何前进.
所以要明确:我想写这个功能
append :: Vector m a …Run Code Online (Sandbox Code Playgroud) 我不确定这是怎么回事,但截至今天,我无法在Visual Studio 2015(社区版)中构建任何东西.
即使创建一个全新的项目,控制台,winforms,类lib没有任何区别,我尝试构建时得到的只是臭名昭着的"操作无法完成"弹出窗口.我曾尝试在项目属性中禁用visual studio托管过程,但无济于事.
这真是令人沮丧,因为我现在无法真正处理任何项目.感觉这应该是一个众所周知的问题,但在这里搜索和谷歌只能得到模糊相似的结果,但我找不到任何完全匹配的东西.
请告知我是否可以访问错误日志或类似内容以提供更多信息.
在拾取堆栈作为开始编写非平凡的haskell程序(大于单个文件)的一步之后,我遇到了不知道如何获取堆栈以识别.ini文件等问题.它似乎不适合.cabal或stack.yaml文件中的任何位置.
为了澄清:在运行堆栈构建/安装之后,具有生成的.exe的文件夹没有资源,因此程序崩溃时会出现一堆IO错误(找不到文件).
我们都知道为替代品指定返回值的标准方式:
mySubstitute.Method().Returns(myValue);
Run Code Online (Sandbox Code Playgroud)
我需要在每次调用时计算 myValue,而不仅仅是一次。这可能吗?
例子:
mySubstitute.Method().Returns(() => ComputeValueBasedOnSystemClockAndTheWeather());
Run Code Online (Sandbox Code Playgroud)
当然这不会编译,因为Method()它并没有真正返回一个 lambda。
编辑:我现在已经解决了这个问题,只需将按钮单击处理程序标记为async void并等待该任务.我认为除了与RegisterAsyncTask一起使用外,WebForms无法以任何方式处理异步.虽然这解决了我的问题,但我仍然对以下代码死锁的原因感兴趣,因为它违背了我目前对异步C#代码如何工作的理解,所以答案仍然受到赞赏.
我有一个服务暴露异步方法,该方法向某些api发送请求.此方法在webforms代码隐藏中使用.我知道ASP.NET只允许一次执行一个线程,因此调用Task.Wait()会导致死锁,因为等待的任务在完成后无法恢复执行,因为上下文线程被阻止.
然而,我的理解(从阅读本博客)调用ConfigureAwait(false)等待的任务导致任务在线程池线程上运行,因此可以恢复在上下文线程上的执行.我仍然从下面的代码中遇到了僵局.为什么是这样?
protected void Activate(object sender, CommandEventArgs e)
{
var someID = int.Parse((string) e.CommandArgument);
DoAsyncThingWithID(someID).Wait();
}
private async Task DoAsyncThingWithID(int ID)
{
try
{
await new SomeService()
.DoSomeAsyncWork(ID)
.ConfigureAwait(false);
}
catch (AppropriateException e)
{
DealWithIt();
}
}
Run Code Online (Sandbox Code Playgroud)
可能需要注意:DoSomeAsyncWork(int)在其下面有更多的异步方法.在底部有一个api包装对象(负责发送HTTP请求),其方法不是异步,但是调用了Task.Run(() => api.SendThingy());
这可能是问题吗?
我有一堂课看起来像这样:
public class MyClass
{
public virtual bool A()
{
return 5 < B();
}
protected virtual int B()
{
return new Random.Next(1, 10);
}
}
Run Code Online (Sandbox Code Playgroud)
在为其编写测试时,MyClass能够执行以下操作会很方便:
[Fact]
public void Blabla()
{
var o = Substitute.ForPartsOf<MyClass>();
o.A().Returns(true);
Assert.True(o.DoSomethingElse());
}
Run Code Online (Sandbox Code Playgroud)
然而,这不起作用。我收到运行时异常:
NSubstitute.Exceptions.CouldNotSetReturnDueToTypeMismatchException
无法为 MyClass.A 返回 Boolean 类型的值(预期类型为 int)。
有没有办法解决这个问题,或者我是否必须创建一个具体的测试双类覆盖A?
当你使用特定类型类的函数时,我对GHCI中的这个东西感到有点困惑,但没有指定你想要的具体类型.请考虑以下代码:
pure (1+) <*> pure 1
> 2
Run Code Online (Sandbox Code Playgroud)
我理解它的方式,当你在GHCI中键入内容时,它会评估表达式并调用putStrLn . show它.但是如何评估呢?为什么这2?我的意思是,它是有意义的,对于大多数应用实例来说它可能是2,但是没有办法确定,对吧?如果我们检查表达式的类型,我们得到:
pure (1+) <*> pure 1 :: (Num b, Applicative f) => f b
Run Code Online (Sandbox Code Playgroud)
好吧,公平,类型看起来合理,但是从来没有指定任何类型类实例,所以GHCI/Haskell如何知道在写pure/ 时要调用什么函数<*>?
来自其他语言的直觉告诉我这应该是一个错误.有点像试图用OOP语言静态调用实例方法(显然不一样,但这是我得到的那种感觉).
这里发生了什么?
一直在寻找C,我正在研究一个简单的程序来读取文本文件,应用caesar密码,并写入新的输出文件.我的问题是,应该构建我的输出字符串的while循环立即终止,声称下一个字符是EOF,即使它显然不是.代码如下:
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#define MORD ".mord"
void die(const char *message)
{
if(errno) {
perror(message);
} else {
printf("ERROR: %s\n", message);
}
exit(1);
}
int main(int argc, char *argv[])
{
if(argc != 3) die("USAGE: dodsmord <filename> <offset>");
char *infilename = argv[1];
char *outfilename = strcat(infilename, MORD);
int offset = atoi(argv[2]);
char *outstr[1000];
FILE *infile = fopen(infilename, "r+");
FILE *outfile = fopen(outfilename, "w+");
if(infile == NULL) {
die("Could not open input file");
}
if(outfile == NULL) …Run Code Online (Sandbox Code Playgroud) c# ×3
haskell ×3
nsubstitute ×2
asp.net ×1
async-await ×1
c ×1
deadlock ×1
eof ×1
fopen ×1
mocking ×1
task ×1
type-theory ×1
typeclass ×1
unit-testing ×1