标签: f#

F#开发和单元测试?

我刚开始使用F#,这是我的第一个功能语言.我一直在使用C#进行准独家工作,并且很享受F#引导我重新思考如何编写代码.我觉得有点迷惑的一个方面是编写代码的过程发生了变化.我现在已经在C#中使用TDD多年了,非常感谢有单元测试知道我在哪里.

到目前为止,我用F#过程中一直写一些功能,和他们一起玩与交互式控制台,直到我在"合理"确保他们的工作,并调整与合并.这适用于像欧拉项目这样的小规模问题,但我无法想象以这种方式构建大的东西.

人们如何进行单元测试并为F#程序构建测试套件?是否有相当于TDD?任何指针或想法都表示赞赏.

tdd f# unit-testing functional-programming

104
推荐指数
6
解决办法
2万
查看次数

如何在现实世界中使用函数式编程?

功能语言很好,因为它们通过消除状态来避免错误,但也因为它们可以很容易地自动并行化,而不必担心线程数.

作为Win32开发人员,我可以将Haskell用于我的应用程序的一些dll吗?如果我这样做,是否会为我自动采取真正的优势?如果是这样,那么编译器给我这个优势呢?

F#是否并行自动编写多个内核和cpu的函数?你会看到任务管理器中的线程数增加吗?

基本上我的问题是,如何以实用的方式开始使用Haskell,如果我这样做,我真的会看到一些好处吗?

f# haskell functional-programming

102
推荐指数
5
解决办法
2万
查看次数

Linux下的MbUnit,在F#项目中使用?

我尝试在gallio-users列表中询问此问题,但问题未能出现(Google Groups称帖子成功).我想这个列表可能会被那些不经常阅读他的电子邮件的人主持:-)看到SO有Gallio和MbUnit的标签,我认为这里值得一提.

我看到MbUnit头版提到他们热衷于维护Mono兼容性.还有一个> 1年的关于gallio用户的帖子说它在Linux下不起作用

如果删除Parallelizable属性,我想测试的项目在Mono下编译得很好.我可以Gallio在Linux下启动控制面板,但不能启动Icarus或Echo.

有没有办法MbUnit在Linux下运行测试?使用命令行(如Gallio.Echo)并且不需要Monodevelop的东西会特别有用.

ubuntu mono mbunit f# gallio

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

对象初始化语法

我刚刚开始使用F#,我找不到像C#3那样进行对象初始化的语法.

即这样:

public class Person {
  public DateTime BirthDate { get; set; }
  public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如何在F#中编写以下内容:

var p = new Person { Name = "John", BirthDate = DateTime.Now };
Run Code Online (Sandbox Code Playgroud)

syntax f# object-initializers

95
推荐指数
3
解决办法
2万
查看次数

Haskell组合(.)与F#的管道前向运算符(|>)

在F#中,使用管道前向运算符|>非常常见.但是,在Haskell中,我只见过使用过的函数组合(.).我知道它们是相关的,但是有没有一种语言原因在Haskell中没有使用管道转发,还是其他什么?

f# haskell functional-programming composition

95
推荐指数
9
解决办法
2万
查看次数

使用C#vs F#或F#vs C#有什么好处?

我为一家技术公司工作,该公司比产品发货做更多的原型设计.我刚才被问到C#和F#有什么区别,为什么MS创建F#以及它会比C#更好.

我一直在使用这种语言,我喜欢它,所以我可以很容易地继续讨论F#的强大功能,但是我缺乏C#的经验来说明为什么我们应该使用它而不是另一种.

使用C#vs F#或F#vs C#有什么好处?

.net c# f#

93
推荐指数
8
解决办法
14万
查看次数

为什么Ocaml/F#中的函数默认不递归?

为什么F#中的函数和Ocaml(可能还有其他语言)默认不是递归的?

换句话说,为什么语言设计者决定明确地让你输入如下rec声明是一个好主意:

let rec foo ... = ...
Run Code Online (Sandbox Code Playgroud)

并且默认情况下不提供函数递归功能?为什么需要显式rec构造?

recursion f# ocaml

91
推荐指数
4
解决办法
8259
查看次数

如何在C#或F#中使用Travis-CI

Travis CI持续集成服务正式支持多种语言,但不支持C#或F#.

我可以在我的.net项目中使用它吗?

c# mono f# travis-ci

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

WP7和F#上的异步POST失败

当我let! read = from.AsyncRead buf在F#中执行时,它会阻塞并且在TCP套接字死亡之前不会返回.为什么?我该如何解决?

它的代码:

module StreamUtil

open System.IO

/// copy from 'from' stream to 'toStream'
let (|>>) (from : Stream) (toStream : Stream) =
  let buf = Array.zeroCreate<byte> 1024
  let rec doBlock () =
    async {
      let! read = from.AsyncRead buf
      if read <= 0 then
        toStream.Flush()
        return ()
      else
        do! toStream.AsyncWrite(buf, 0, read)
        return! doBlock () }
  doBlock ()
Run Code Online (Sandbox Code Playgroud)

它是从这段代码调用的:

use fs = new FileStream(targPath, FileMode.CreateNew, FileAccess.ReadWrite)
do! req.InputStream |>> fs
Run Code Online (Sandbox Code Playgroud)

并使用来自Windows Phone 7.1模拟器的此代码通过HTTP请求:

public …
Run Code Online (Sandbox Code Playgroud)

rest f# asynchronous windows-phone

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

较高的kinded类型何时有用?

我一直在做F#开发一段时间,我喜欢它.然而,我知道在F#中不存在的一个流行语是更高级的类型.我已经阅读了关于高等类型的材料,我想我理解他们的定义.我只是不确定他们为什么有用.有人可以在Scala或Haskell中提供一些高级类型易于使用的示例吗?这需要F#中的变通方法?同样对于这些示例,如果没有更高级的类型(或F#中反之亦然),解决方法是什么?也许我只是习惯于解决它,我没有注意到这个功能的缺席.

(我认为)我得到的不是myList |> List.map fmyList |> Seq.map f |> Seq.toList更高的kinded类型允许你简单地写myList |> map f,它将返回一个List.这很好(假设它是正确的),但似乎有点小?(并且不能简单地通过允许函数重载来完成?)我通常转换为Seq无论如何然后我可以转换为我想要的任何东西.再说一次,也许我只是习惯于解决它.但有没有任何一个例子,高级类型的类型真的可以节省你的击键或类型安全?

f# haskell types scala higher-kinded-types

84
推荐指数
5
解决办法
8262
查看次数