Tag: haskell

Java / C#类型系统有哪些不足之处?

它经常听说Haskell(我不知道)有一个非常有趣的类型系统..我对Java非常熟悉,而且对C#有点熟悉,有时碰巧我正在与类型系统作斗争,所以一些设计适应或以某种方式更好地工作。 这让我想知道…… 由于Java / C#类型系统的不足,以某种方式出现了什么问题? 你怎么处理他们?

Haskell相当于C#5 async / await

我刚刚阅读了使用await和async关键字在C#5.0中处理异步函数的新方法。 从等待的C#参考考试: private async Task SumPageSizesAsync() { // To use the HttpClient type in desktop apps, you must include a using directive and add a // reference for the System.Net.Http namespace. HttpClient client = new HttpClient(); // . . . Task getContentsTask = client.GetByteArrayAsync(url); byte[] urlContents = await getContentsTask; // Equivalently, now that you see […]

在C#中使用高阶Haskell类型

如何使用C#(DLLImport)中的高阶类型签名来使用和调用Haskell函数,如… double :: (Int -> Int) -> Int -> Int — higher order function typeClassFunc :: … -> Maybe Int — type classes data MyData = Foo | Bar — user data type dataFunc :: … -> MyData C#中相应的类型签名是什么? [DllImport (“libHSDLLTest”)] private static extern ??? foo( ??? ); 另外(因为它可能更容易):我如何在C#中使用“未知”Haskell类型,所以我至少可以传递它们,而不知道任何特定类型的C#? 我需要知道的最重要的function是传递类型类(如Monad或Arrow)。 我已经知道如何将Haskell库编译为DLL并在C#中使用,但仅适用于一阶函数。 我也知道Stackoverflow – 在.NET中调用Haskell函数 , […]

将Haskell的类型系统与C#进行比较,寻找类似物

我是一个很新的Haskell编程。 我正在尝试处理它的类,数据,实例和newtype。 这是我所理解的: data NewData = Constr1 Int Int | Constr2 String Float 与(Java或C#)大致相同: class NewData { private int a, b; private string c; private float d; /* get’ers and set’ers for a, b, c and d ……………. */ private NewData() { } private NewData(int a, int b) { this.a = a; this.b = b; […]

关于Haskell的问题 – > C#转换

背景: 我被“拖累”看到这个问题: Fibonacci在Haskell中的封闭式表达式 当作者最初用许多其他语言标记但后来专注于Haskell问题时。 不幸的是,我对Haskell没有任何经验,所以我无法真正参与这个问题。 然而,其中一个答案引起了我的注意,回答者把它变成了一个纯整数学问题。 这对我来说听起来很棒 ,所以我必须弄清楚它是如何工作的,并将其与递归的Fibonacci实现进行比较,以了解它的准确性。 我有一种感觉,如果我只记得涉及非理性数字的相关数学,我可能能够自己解决所有问题(但我没有)。 因此,我的第一步是将其移植到我熟悉的语言中。 在这种情况下,我正在做C#。 幸运的是,我并没有完全处于黑暗中。 我在另一种函数式语言(OCaml)方面有很多经验,所以很多看起来对我来说都很熟悉。 从转换开始,一切看起来都很简单,因为它基本上定义了一个新的数字类型来帮助计算。 然而,我在翻译中遇到了几个障碍,但我在完成翻译时遇到了麻烦。 我的结果完全错了。 分析: 这是我正在翻译的代码: data Ext = Ext !Integer !Integer deriving (Eq, Show) instance Num Ext where fromInteger a = Ext a 0 negate (Ext ab) = Ext (-a) (-b) (Ext ab) + (Ext cd) = Ext (a+c) (b+d) (Ext ab) […]

IO monad在C#等语言中是否有意义

在花了很多时间阅读和思考之后,我想我终于掌握了monad是什么,它们是如何工作的,以及它们对它们有用的东西。 我的主要目标是弄清楚monad是否适用于我在C#中的日常工作。 当我开始学习monad时,我得到的印象是它们是神奇的,并且它们以某种方式使IO和其他非纯函数变得纯粹。 我理解monads对于.Net中LINQ之类的东西的重要性,而Maybe对于处理不返回有效值的函数非常有用。 我也很欣赏需要限制代码中的状态并隔离外部依赖,我希望monad也能帮助它们。 但我终于得出结论,IO和处理状态的monad是Haskell的必需品,因为Haskell没有别的方法可以做到(否则,你不能保证排序,有些调用会被优化掉。)但是对于更多的主流语言,monad并不适合这些需求,因为大多数语言已经很容易处理和状态和IO。 所以,我的问题是,公平地说IO monad真的只对Haskell有用吗? 是否有充分的理由在C#中实现IO monad?

Haskell和LINQ之间有什么联系吗?

我使用LINQ在C#中编写了一些查询。 过了一会儿,我开始使用Haskell一点点,这是一种函数式编程语言(一种不那么受欢迎的语言),对我来说似乎它们几乎都是一样的。 但我不确定这一点。 请问,如果有人比我更多地使用它们,他们能否告诉我他们在编程原理方面是否几乎相同? LINQ可以被认为是函数式编程吗? 谢谢。