小编Guy*_*Guy的帖子

获取Haskell中所有可能的数据类型值的列表

如果我有数据类型说:

data Color = Red | Yellow | Green
Run Code Online (Sandbox Code Playgroud)

有没有办法可以将其转换为[Color]类型列表获取所有可能的值?[红色,黄色,绿色]

也许这是一个完整的反模式?

haskell types list

34
推荐指数
3
解决办法
6714
查看次数

比较Haskell中的函数

有没有办法比较Haskell中的两个函数?

我的想法是答案是否定的,因为函数不会派生Eq类型.但是我正在尝试编写一个非常简单的函数,这似乎是一件正常的事情:

search :: ((Enum a) => a -> a) -> Card -> [Card]
search op x list = if (op == succ && rank x == King) || 
                      (op == pred && rank x == Ace)
                   then []
                   else let c = [ n | n <- list, rank n == op (rank x)]
                     in if length c == 1
                     then x : search op (head c) list
                     else []
Run Code Online (Sandbox Code Playgroud)

错误信息:

No instance for (Eq (Rank -> Rank))
      arising …
Run Code Online (Sandbox Code Playgroud)

haskell

11
推荐指数
4
解决办法
6118
查看次数

模拟ShowDialog功能

我正在编写一个应用程序(c#+ wpf),其中所有模态样式对话框都实现为UserControl覆盖main的半透明网格Window.这意味着只有一个Window,它保持了所有公司应用程序的外观和感觉.

要显示a MessageBox,语法如下:

CustomMessageBox b = new CustomMessageBox("hello world");
c.DialogClosed += ()=>
{
   // the rest of the function
}
// this raises an event listened for by the main window view model,
// displaying the message box and greying out the rest of the program.
base.ShowMessageBox(b); 
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,不仅执行流程实际上已经反转,而且与经典的.NET版本相比,它的冗长程度如此:

MessageBox.Show("hello world");
// the rest of the function
Run Code Online (Sandbox Code Playgroud)

我真正想要的是一种不会返回的方法,base.ShowMessageBox直到它引发了对话框关闭事件,但是我无法看到如何在不挂起GUI线程的情况下等待这一点,从而阻止用户点击OK.我知道我可以将一个委托函数作为函数的参数来ShowMessageBox阻止执行的反转,但仍会导致一些疯狂的语法/缩进.

我错过了一些明显的东西,还是有标准的方法来做到这一点?

c# wpf events dialog messagebox

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

WPF如何从CollectionViewSource设置最大结果数

我想显示一组使用数据的DataTemplateItemsControlItemsPanel集作为大小3×3的均匀网格的ItemsSource所述的ItemsControl被设置为结合至CollectionViewSource其过滤基于搜索项的源集合。这一切都很好。

我绑定到的列表是任意大小的,但是我只希望显示9个结果,但是我一生都无法解决如何:
a)限制 CollectionViewSource输出前9个项目
b)将限制UniformPanel为仅3 x 3,并且从不创建新行
c)将限制ItemsControl为仅一次创建9个数据模板。

我真的挠头,因为我确定这是一个常见的数据绑定方案,但是我在网上找不到任何有关它的信息。

c# data-binding wpf itemscontrol collectionviewsource

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

.Net TimeZoneInfo ID - 它是Windows语言特定的吗?

我正在使用.net TimeZoneInfo FindSystemTimeZoneById方法,我理解查询注册表.注册表中存储的时区ID字符串的值是"HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zone"是否取决于Windows安装的语言?

注册表项包含一个名为"显示名称"的值,因此将其作为特定于语言的值是有意义的,但我无法确定是否是这种情况(缺少安装不同语言版本的Windows).谁能让我知道?

.net c# windows registry timezone

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

使用匿名或lambda函数连接到Boost Signals2信号

我正在尝试执行以下操作,以便从增强信号接收字符串并将其发布到显示器.以下语法不正确.

signal<void (const char*)>                      UserMessageEvent;

// connect anonymous boost function to display message box on user message event 
UserMessageEvent.connect(boost::bind(AfxMessageBox, _1));
Run Code Online (Sandbox Code Playgroud)

如果这是C#,我会做以下操作,让我相信我想使用lambda函数在信号的调用类型和AfxMessageBox参数的类型之间进行转换.但是我不清楚如何做到这一点.

UserMessageEvent += (c) => MessageBox.Show((some const char to LPCSTR conversion)c);
Run Code Online (Sandbox Code Playgroud)

有什么建议?

编辑:msvc10给出的错误是错误C2914:'boost :: bind':不能推断模板参数,因为函数参数是模糊的

c++ events boost signals

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