小编rob*_*kuz的帖子

如何在Pusher中创建频道

我找不到任何关于使用Pusher创建频道的明确信息.当在客户端订阅或在服务器上推送事件时,这只是一个隐式操作吗?

class HelloController < ApplicationController
  def hello
    #does this create a channel "named 'test-channel'"?
    Pusher['test-channel'].trigger('test_event', { :hello => 'world' })
  end
end
Run Code Online (Sandbox Code Playgroud)

如果是这样,可用频道数量有限制吗?

我的问题的原因是我想为每个用户创建一个独特的频道,并在客户端关闭该频道之后.

但可能这不是一个好主意;-)

谢谢

pusher

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

转换受歧视联盟的特定成员名单的规范方法是什么?

我有一个DU的特定成员的列表,我想要转换后,我已经过滤了另一个列表,正是这个成员.

type FooBar = 
     | Foo of int
     | Bar of int

type FooBarWrapper = FooWrapper of FooBar

let fbs = [Foo(1); Bar(2); Foo(3); Bar(4)]

let onlyFoos x = 
    match x with
        | Foo x -> true
        | _ -> false

let foos = fbs |> List.filter onlyFoos

let fooValues (Foo x) = x + 1

let result = foos |> List.map fooValues;;
Run Code Online (Sandbox Code Playgroud)

现在这给了我一个不完整的模式匹配

let fooValues (Foo x) = x + 1
               ^^^^^
Run Code Online (Sandbox Code Playgroud)

因为我不匹配酒吧 - 但随后 - 在那个特定的时间点我知道该列表只包含Foos.

唯一的方法是fooValues …

f# pattern-matching discriminated-union

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

为什么不了解此通用成员约束

给出以下函数定义

let inline add<'X,'Y when 'X : (member Add : 'Y -> unit)> 
    (target:'X) (value:'Y) = target.Add value  
Run Code Online (Sandbox Code Playgroud)

为什么我会收到此错误?

  target.Add v
----^^^^^^^^^^
stdin(64,5): error FS0072: Lookup on object of indeterminate type based on 
information prior to this program point. A type annotation may be needed 
prior to this program point to constrain the type of the object. This may 
allow the lookup to be resolved.
Run Code Online (Sandbox Code Playgroud)

我对这里需要的其他类型注释感到有点困惑.谁能解释一下?

generics f#

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

定义代表

我对下面的代码有点困惑,为什么最后2次尝试定义处理程序(Delegate)不起作用.

//this works
let serializer_setting = new JsonSerializerSettings(Error = fun (sender:obj) (args:Serialization.ErrorEventArgs) -> ())

//this doesnt
let err_handler1 (sender:obj) (args:Serialization.ErrorEventArgs) = ()
let serializer_setting1 = new JsonSerializerSettings(Error = err_handler1)

//neither this
let err_handler2 = fun (sender:obj) (args:Serialization.ErrorEventArgs) -> ()
let serializer_setting2 = new JsonSerializerSettings(Error = err_handler2)
Run Code Online (Sandbox Code Playgroud)

它们不完全一样吗?

编辑

我也尝试过这个

 type Delegate = delegate of obj * ErrorEventArgs -> Unit
 let err_handler1 (sender:obj) (args:Serialization.ErrorEventArgs) = ()
 let serializer_setting1 = new JsonSerializerSettings(Error = new Delegate(err_handler1))
Run Code Online (Sandbox Code Playgroud)

但这给了我以下错误

Error   1   This expression was expected …
Run Code Online (Sandbox Code Playgroud)

f# delegates

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

如何删除Aff(类似于Eff的unsafePerformEff)?

我试图通过Node.FS.Aff.readTextFile获取我从文件中读取的一些文件内容,因此使用异步效果.

但是我的问题更为笼统.

myFile::forall r. String -> Aff ( fs :: FS | r) (Either Error String)
myFile file = attempt $ readTextFile Node.Encoding.UTF8 file
Run Code Online (Sandbox Code Playgroud)

所以我想得到Left或者Right价值.如果它在哪里Eff而不是Aff我可以使用

let x = unsafePerformEff $ myFile "someFile.txt"
Run Code Online (Sandbox Code Playgroud)

谢谢

purescript

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

静态解析类型参数需要额外的表达式

以下代码

let inline foo< ^T, ^U when ^T : (member foo : (^U -> ^T) -> ^T -> ^T)> 
    (f:(^U -> ^T)) (t:^T) : ^T = 
    (^T : (member foo : (^U -> ^T) -> ^T -> ^T) f,t )
Run Code Online (Sandbox Code Playgroud)

产生此错误

let inline foo< ^T, ^U when ^T : (member foo : (^U -> ^T) -> ^T -> ^T)> (f:^U) (t:^T) : ^T = (^T : (member foo : (^U -> ^T) -> ^T -> ^T) f,t );;
-----------------------------------------------------------------------------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

/stdin(45,96): …
Run Code Online (Sandbox Code Playgroud)

f#

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

有没有办法限制可能的产品类型的实例?

让我们假设这两种总和类型

data Currency =
    | GBP
    | EUR
    | DKK

data Country =
    | DE
    | AT
    | DK
    | UK
Run Code Online (Sandbox Code Playgroud)

和以下产品类型

 type CC = (Country, Currency)
Run Code Online (Sandbox Code Playgroud)

现在即使所有这些国家都是欧盟的一部分(是的,亲爱的软件考古学家从3000年开始 - 英国曾经是欧盟的一部分;-))他们有不同的货币(或不是).所以我想限制的可能值CC,以

 (DE, EUR)
 (AT, EUR)
 (UK, GBP)
 (DK, DKK)
Run Code Online (Sandbox Code Playgroud)

并使其他所有组合都不可表达.
是否有可能在类型级别上表达这样的东西?
如果不是,那么精通Haskeller的方法怎么会这样呢?

haskell types

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

记录类型反转器

我想反转具有唯一常量属性值的记录的属性名称和类型。

const VALUE = {
    field1: "fieldA",
    field2: "fieldB"
} as const

type Reversed = Reverser<typeof VALUE>

//which should yield the following type
type Reversed = {
    fieldA: "field1";
    fieldB: "field2";
} 
Run Code Online (Sandbox Code Playgroud)

我认为这是不可能的,因为属性值不一定是唯一的。但我还是要问;-)

typescript mapped-types

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

如何在不完整模式匹配时抑制编译器警告

好的,好的 - 我知道这一般是个坏主意.然而,在一个非常具体的背景下 - 在我的测试用例中,我只是期望某个结果,而其他任何东西都会以任何方式出错.并且进行模式匹配只是模糊了我的测试代码.

这是一个例子

type Result =
     | Success of int * int
     | Error of String

let someFunc x : Result = // implementation not important here

// and then later in my test code

[<Test>]
member me.``Some Cool Test Method``() =
    let (Success x, y) = someFunc "Foo"
    equals x 1
    equals y 2
Run Code Online (Sandbox Code Playgroud)

关于如何使这更愉快和编译友好的任何想法?

f# pattern-matching

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

如何统一这些类型?

我有来自purescript-express的以下代码(但问题更为一般).

setHandler :: forall e. Handler e
setHandler = do
    idParam   <- getRouteParam "id"
    send "Yeah! "

appSetup :: forall e. App e
appSetup = do
    get "/set/:id" setHandler
Run Code Online (Sandbox Code Playgroud)

setHandler需要具有get定义为的给定签名

> :t get
forall e r.
(RoutePattern r) => r
                    -> HandlerM ( express :: EXPRESS | e ) Unit
                    -> AppM ( express :: EXPRESS | e ) Unit
Run Code Online (Sandbox Code Playgroud)

但是现在我想在其中使用以下功能 setHandler

getPointsSet :: forall f. String -> Aff ( fs :: FS | f ) Foobar …
Run Code Online (Sandbox Code Playgroud)

types purescript

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