Haskell 获取Gtk2Hs中的组合框小部件值

Haskell 获取Gtk2Hs中的组合框小部件值,haskell,combobox,gtk2hs,Haskell,Combobox,Gtk2hs,我正在尝试使用以下代码获取ComboBox小部件值: selectRadioB cb = do ntxt <- comboBoxGetActiveText cb case ntxt of Just ("Option 1") -> ... Just ("Option 2") -> ... Just ("Option 3") -> ... return () 我怎样才能解决这个问题?我提出了一个类似的

我正在尝试使用以下代码获取ComboBox小部件值:

selectRadioB cb = do
ntxt <- comboBoxGetActiveText cb
case ntxt of
            Just ("Option 1") -> ...
            Just ("Option 2") -> ...
            Just ("Option 3") -> ... 
return ()
我怎样才能解决这个问题?我提出了一个类似的问题(),但我不想使用pack函数

为什么我不能像这样使用fromString

cb <- comboBoxNewText
comboBoxAppendText cb (fromString "Option 1")
comboBoxAppendText cb (fromString "Option 2")
comboBoxAppendText cb (fromString "Option 3")
comboBoxSetActive cb 0
cb如果我们查看,就会发现
ComboBoxText
Text
的别名:

现在
Text
String
都是表示文本的方法,但是
Text
以紧凑的方式来表示文本,而
String
(实际上是
[Char]
的别名)以链表方式来表示(这会消耗更多内存,通常会导致处理效率降低)

使用 但是,您可以简单地使用在
字符串
文本
之间进行转换:

pack::String->Text

解包::文本->字符串

因此,您可以使用:

selectRadioB cb = do
    ntxt <- comboBoxGetActiveText cb
    case fmap unpack ntxt of
            Just "Option 1" -> ...
            Just "Option 2" -> ...
            Just "Option 3" -> ... 
    return ()
你可以把它放在你文件的开头。这意味着,如果您编写一个字符串,Haskell可以将其解释为
Text
元素

所以如果你写:

{-# LANGUAGE OverloadedStrings #-}

selectRadioB cb = do
    ntxt <- comboBoxGetActiveText cb
    case ntxt of
            Just "Option 1" -> ...
            Just "Option 2" -> ...
            Just "Option 3" -> ...
    return ()
因此,您可以从string
函数中删除

如果我们查看,我们会发现
ComboBoxText
文本
的别名:

现在
Text
String
都是表示文本的方法,但是
Text
以紧凑的方式来表示文本,而
String
(实际上是
[Char]
的别名)以链表方式来表示(这会消耗更多内存,通常会导致处理效率降低)

使用 但是,您可以简单地使用在
字符串
文本
之间进行转换:

pack::String->Text

解包::文本->字符串

因此,您可以使用:

selectRadioB cb = do
    ntxt <- comboBoxGetActiveText cb
    case fmap unpack ntxt of
            Just "Option 1" -> ...
            Just "Option 2" -> ...
            Just "Option 3" -> ... 
    return ()
你可以把它放在你文件的开头。这意味着,如果您编写一个字符串,Haskell可以将其解释为
Text
元素

所以如果你写:

{-# LANGUAGE OverloadedStrings #-}

selectRadioB cb = do
    ntxt <- comboBoxGetActiveText cb
    case ntxt of
            Just "Option 1" -> ...
            Just "Option 2" -> ...
            Just "Option 3" -> ...
    return ()
因此,您可以删除
fromString
函数。

您可以像这样使用
fromString
。为什么你认为你不能?你可以像那样使用
fromString
。为什么你认为你不能?
{-# LANGUAGE OverloadedStrings #-}

selectRadioB cb = do
    ntxt <- comboBoxGetActiveText cb
    case ntxt of
            Just "Option 1" -> ...
            Just "Option 2" -> ...
            Just "Option 3" -> ...
    return ()
{-# LANGUAGE OverloadedStrings #-}

-- ...

cb <- comboBoxNewText
comboBoxAppendText cb "Option 1"
comboBoxAppendText cb "Option 2"
comboBoxAppendText cb "Option 3"
comboBoxSetActive cb 0