小编Jef*_*ner的帖子

从功能编程范例中记录

我更倾向于尽可能地接近功能范例,当我的大脑迎接挑战时,尽可能地挤压到纯粹的功能.我尽可能使用F#.通常,我会遇到VB.NET或C#(或VBA,当我真的不走运时).所以我的语言让我偏离了功能方法.

从历史上看,我已经忽略了日志记录并与用户通信,直到我得到结果 - 让用户等待.现在我正在尝试实现状态栏的记录和/或更新.这很容易,因为我的语言允许我随时写入标准输出.但是从一个纯粹的功能角度来看,如何将一个人的功能泄露到外部世界?在计算过程中记录或与用户通信是否与纯功能方法相反?

我敢肯定在Haskell中会使用Monad.使用其他语言时呢?

谢谢.

logging functional-programming purely-functional

21
推荐指数
2
解决办法
5772
查看次数

SignInManager.PasswordSignInAsync抛出空对象异常

AccountController.cs安排AccountController上课.Login该类的方法失败了.特别,

var result = await SignInManager.PasswordSignInAsync(
    model.Email, model.Password, model.RememberMe, shouldLockout: true);
Run Code Online (Sandbox Code Playgroud)

Login方法内投掷System.NullReferenceException.

我已经验证了model.Email,model.Password并且model.RememberMe不是空的.下一步是深入挖掘SignInManager,这是一个AccountController类型的对象ApplicationSignInManager.从上面一行调用的get访问器SignInManager

public ApplicationSignInManager SignInManager
{
    get
    {
        return _signInManager ??
            HttpContext.GetOwinContext().Get<ApplicationSignInManager>();
    }
    // private set...
}
Run Code Online (Sandbox Code Playgroud)

我改写为

public ApplicationSignInManager SignInManager
{
    get
    {
        var c = HttpContext.GetOwinContext();
        var m = c.Get<ApplicationSignInManager>();
        return _signInManager ?? m;
    }
    // private set...
}
Run Code Online (Sandbox Code Playgroud)

调试并确保get访问者没有返回 …

c# asp.net-mvc nullreferenceexception owin asp.net-mvc-5

12
推荐指数
2
解决办法
7367
查看次数

Haskell错误"不在范围内:数据构造函数"

我已经回顾了关于这个错误的其他帖子,我不认为我犯了这些错误.

不在范围内:数据构造函数'Extraction'.

Configuration.hs:

module Configuration
(Config
 , columns
 , headers
 , types
 , totals
 , extractions,
 Extraction
 , xState
 , xDivisions
 , xOffice
 ...) where

...

data Extraction = Extraction { xState     :: String
                             , xDivisions :: Maybe [String]
                             , xOffice    :: Maybe String } deriving Show


data Config = Config { columns     ::  String
                     , headers     :: [String]
                     , types       :: [String]
                     , totals      :: [String]
                     , extractions :: [Extraction] } deriving Show

...
Run Code Online (Sandbox Code Playgroud)

PIF.hs:

module PIF (...) where …
Run Code Online (Sandbox Code Playgroud)

haskell

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

联盟类型的F#列表

我想要一份报告清单.报告可以是详细信息或部分类型.

module Data

type Section = { Header: string;
                 Lines:  string list;
                 Total:  string }

type Detail = { State:     string;
                Divisions: string list;
                Sections:  Section list }

type Summary = { State:    string;
                 Office:   string;
                 Sections: Section list }

type Report = Detail | Summary
Run Code Online (Sandbox Code Playgroud)

然后在我的代码中,我想做以下事情:

let mutable (reports:Report list) = []

...

reports <- detail::reports
// or
reports <- summary::reports
Run Code Online (Sandbox Code Playgroud)

编译器在第一种情况下抱怨:"表达式应该具有类型报告,但这里有类型详细信息",并且在第二种情况下适当地类似.

我不想做这样的事情吗?我应该以不同的方式思考问题吗?由于报表是详细信息或摘要,因此报表列表不应接受详细信息或摘要?什么是报告列表,如果不是详细信息或摘要列表?

谢谢.

f# list discriminated-union

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

在F#联合类型列表上运行

这是我在F#联盟类型列表中的问题的延续.感谢有用的反馈,我能够创建一个Reports 列表,其中Report包含Detail或者Summary.这是数据定义了:

module Data

type Section = { Header: string;
                 Lines:  string list;
                 Total:  string }

type Detail = { State:     string;
                Divisions: string list;
                Sections:  Section list }

type Summary = { State:    string;
                 Office:   string;
                 Sections: Section list }

type Report = Detail of Detail | Summary of Summary
Run Code Online (Sandbox Code Playgroud)

现在我已经Report在一个名为的变量中得到了s 列表reports,我想迭代这些Report对象并根据每个对象执行操作.除了处理任何一个Detail.Divisions或两个的情况外,操作是相同的Summary.Office.显然,我必须以不同的方式处理这些问题.但我不想复制处理类似StateSections每个代码的所有代码.

我的第一个(工作)想法如下:

for report …
Run Code Online (Sandbox Code Playgroud)

f# list discriminated-union

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

F#、FParsec 和更新 UserState

好的,由于我的上一个问题没有引起任何回应,我正在朝着不同的方向前进。哈哈!

除了有关管理用户状态或访问先前解析器结果的官方文档之外我找不到任何示例。

Nb 这段代码不能编译。

namespace MultipartMIMEParser

open FParsec
open System.IO


type Header = { name  : string
              ; value : string
              ; addl  : (string * string) list option }

type Content = Content of string
             | Post of Post list
and Post = { headers : Header list
           ; content : Content }

type private UserState = { Boundary : string }
  with static member Default = { Boundary="" }


module …
Run Code Online (Sandbox Code Playgroud)

f# multipart fparsec

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

Haskell HDBC在F#中的优雅?

我对Haskell的简洁和优雅感到震惊.但是我在一个.Net的房子里工作,所以当我能够逃脱它时,我会使用F# - 我可能是全国数百名使用它的人中唯一一个.

ADO.NET或F#是否提供与HDBC一样简洁优雅的东西executeMany?我正在通过真实世界Haskell.在第21章中,它提供了这个例子:

ghci> conn <- connectSqlite3 "test1.db"
ghci> stmt <- prepare conn "INSERT INTO test VALUES (?, ?)"
ghci> executeMany stmt [[toSql 5, toSql "five's nice"], [toSql 6, SqlNull]]
ghci> commit conn
ghci> disconnect conn
Run Code Online (Sandbox Code Playgroud)

我想在我的F#中获得这种优雅和简洁.我已经看到很多关于使用参数化查询以避免SQL注入攻击的炒作.在这种情况下,我没有使用它们有三个原因:

  1. 我发现.Net中的参数化查询很丑陋且繁琐.
  2. 我的数据来自公司办公室,因此它(大部分)都是干净的.
  3. 我的表有34列.我鄙视用34列参数化查询的想法.

这是我的F#代码:

module Data

open System
open System.Data
open System.Data.OleDb
open System.Text.RegularExpressions

type Period = Prior | Current

let Import period records db =
    use conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + db + ";Persist …
Run Code Online (Sandbox Code Playgroud)

ado.net f# haskell hdbc

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

F#FTP在C#成功的地方失败

我用这段代码用C#(.Net 3.5)编写了一个应用程序.

using System;
using System.Net;

string strURI = String.Format("ftp://x{0}ftp/%2F'{1}'", parm1, parm2);
FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(strURI);
ftp.Proxy = null;
ftp.KeepAlive = true;
ftp.UsePassive = false;
ftp.UseBinary = false;
ftp.Credentials = new NetworkCredential("uid", "pass");
ftp.Method = WebRequestMethods.Ftp.DownloadFile;
FtpWebResponse response = (FtpWebResponse)ftp.GetResponse();
...
Run Code Online (Sandbox Code Playgroud)

我已将其转换为F#(.NET 4.0)以在我的应用程序中使用.

open System.Net

let uri = sprintf "ftp://x%sftp/%%2F'%s'" parm1 parm2
let ftp = FtpWebRequest.Create(uri) :?> FtpWebRequest
ftp.Credentials <- new NetworkCredential("uid", "pass")
ftp.Method <- WebRequestMethods.Ftp.DownloadFile
ftp.Proxy <- null
let response = ftp.GetResponse() :?> FtpWebResponse
...
Run Code Online (Sandbox Code Playgroud)

此时,FSI抱怨道.

System.Net.WebException:远程服务器返回错误:(550)文件不可用(例如找不到文件,没有访问权限).

然而,C#应用程序运行并成功下载该文件.我在F#中缺少什么(除了4.0中没有的属性,即KeepAlive,UsePassive和UseBinary)?

ftp f#

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