我找不到任何关于使用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)
如果是这样,可用频道数量有限制吗?
我的问题的原因是我想为每个用户创建一个独特的频道,并在客户端关闭该频道之后.
但可能这不是一个好主意;-)
谢谢
我有一个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 …
给出以下函数定义
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)
我对这里需要的其他类型注释感到有点困惑.谁能解释一下?
我对下面的代码有点困惑,为什么最后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) 我试图通过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)
谢谢
以下代码
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) 让我们假设这两种总和类型
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的方法怎么会这样呢?
我想反转具有唯一常量属性值的记录的属性名称和类型。
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)
我认为这是不可能的,因为属性值不一定是唯一的。但我还是要问;-)
好的,好的 - 我知道这一般是个坏主意.然而,在一个非常具体的背景下 - 在我的测试用例中,我只是期望某个结果,而其他任何东西都会以任何方式出错.并且进行模式匹配只是模糊了我的测试代码.
这是一个例子
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)
关于如何使这更愉快和编译友好的任何想法?
我有来自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) f# ×5
purescript ×2
types ×2
delegates ×1
generics ×1
haskell ×1
mapped-types ×1
pusher ×1
typescript ×1