gtk2hs:予期されたタイプ 'IO [Int]'を実際のタイプ '[Int]'と一致させることができませんでした

user3470406

GUIから数値のリストを取得して、gtk2hsを使用していくつかの変更を行い、結果をGUIに返したいと思っているすべての人。ただし、多くのエラーが発生しました。私はHaskellの新人です、誰かがそれを修正する方法を教えてもらえますか?ありがとう!

import Graphics.UI.Gtk
import Data.List 

main :: IO ()
main= do
  initGUI
  window <- windowNew
  set window [windowTitle := "Text Entry", containerBorderWidth := 10]

  vb <- vBoxNew False 0
  containerAdd window vb

  hb <- hBoxNew False 0
  boxPackStart vb hb PackNatural 0

  txtfield <- entryNew
  boxPackStart hb txtfield PackNatural 5
  button <- buttonNewFromStock stockInfo
  boxPackStart hb button PackNatural 0

  txtstack <- statusbarNew
  boxPackStart vb txtstack PackNatural 0
  id <- statusbarGetContextId txtstack "Line"

  widgetShowAll window
  widgetSetSensitivity button False

  onEntryActivate txtfield (saveText txtfield button txtstack id)
  onPressed button (statusbarPop txtstack id)
  onDestroy window mainQuit
  mainGUI

  saveText :: Entry -> Button -> Statusbar -> ContextId -> IO ()
  saveText fld b stk id = do
                        txt <- entryGetText fld
                        result <- convert txt
                        lt <- first resultt
                        result2 <- combineTogether lt
                        mesg <-  " is the first element of input text" ++ txt

                        widgetSetSensitivity b True
                        msgid <- statusbarPush stk id mesg
                        return ()
convert :: [Int] -> IO [Int]
convert lstr = map read $ words lstr :: [Int]

converttoStr lst = map show lst 

combineTogether :: [Int] -> IO[Char]
combineTogether lst = intercalate " " (converttoStr lst)

first :: [Int] -> IO [Int]
first (x:xs) = xs

エラーメッセージは次のとおりです。

[1 of 1] Compiling Main             ( testproject.hs, testproject.o )

testproject.hs:39:38:
Couldn't match type ‘[]’ with ‘IO’
Expected type: IO Char
  Actual type: [Char]
In a stmt of a 'do' block:
  mesg <- " is the first element of input text" ++ txt
In the expression:
  do { txt <- entryGetText fld;
       result <- convert txt;
       lt <- first result;
       result2 <- combineTogether lt;
       .... }
In an equation for ‘saveText’:
    saveText fld b stk id
      = do { txt <- entryGetText fld;
             result <- convert txt;
             lt <- first result;
             .... }

testproject.hs:39:79:
Couldn't match type ‘Int’ with ‘Char’
Expected type: [Char]
  Actual type: [Int]
In the second argument of ‘(++)’, namely ‘txt’
In a stmt of a 'do' block:
  mesg <- " is the first element of input text" ++ txt

testproject.hs:48:16:
Couldn't match expected type ‘IO [Int]’ with actual type ‘[Int]’
In the expression: map read $ words lstr :: [Int]
In an equation for ‘convert’:
    convert lstr = map read $ words lstr :: [Int]

testproject.hs:48:33:
Couldn't match type ‘Int’ with ‘Char’
Expected type: String
  Actual type: [Int]
In the first argument of ‘words’, namely ‘lstr’
In the second argument of ‘($)’, namely ‘words lstr’

testproject.hs:51:23:
Couldn't match expected type ‘IO [Char]’ with actual type ‘[Char]’
In the expression: intercalate " " (converttoStr lst)
In an equation for ‘combineTogether’:
    combineTogether lst = intercalate " " (converttoStr lst)

testproject.hs:54:16:
Couldn't match expected type ‘IO [Int]’ with actual type ‘[Int]’
In the expression: xs
In an equation for ‘first’: first (x : xs) = xs
エリック

Do-notationは、一連のバインド操作の構文糖衣です。そのことを念頭に置いて、do-blockのすべての行が「IO」タイプである必要があることは理にかなっています。これが関数の定義方法だからです。

次の行を変更してみてください

mesg <- " is the first element of input text" ++ txt

let mesg = " is the first element of input text" ++ txt

(これも同等です)

mesg <- return " is the first element of input text" ++ txt

これで、その特定の行にある問題が修正されるはずです。そして、「return」関数の型シグネチャを見ると、さらに意味があります。

Monad m => a -> m a

これは、「「a」を指定します。モナドに包まれた「a」を提供します」(この場合はIOモナド)と言います。

これが少し役立つことを願っています。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

期待されるタイプ '(Int, Int)' を実際のタイプ '[t0]' と一致させることができませんでした

分類Dev

期待されるタイプ 'a-> Int'を実際のタイプ 'IOArrow StringInt'と一致させることができませんでした

分類Dev

Haskell-タイプ `(Int、Integer) 'を` Pos'と一致させることができませんでした

分類Dev

予期されたタイプ 'IO [String]'を実際のタイプ '[String]'と一致させることができませんでした

分類Dev

期待される型 `Int 'を実際の型[Int]の二乗和と一致させることができませんでした

分類Dev

期待される型「Int」を実際の型「m0Int」と一致させることができませんでした

分類Dev

期待される型 `Int 'を実際の型[Int]と一致させることができませんでした

分類Dev

期待される型 `Maybe(String、Int、String) 'を実際の型`([Char]、t0、[Char])'と一致させることができませんでした

分類Dev

期待される型 `() 'を実際の型` Int'と一致させることができませんでした

分類Dev

Haskellは期待される型 '[(Char、b0)]'を実際の型 '(Char、Int)'と一致させることができませんでした

分類Dev

期待されるタイプ `IO() 'を実際のタイプ` a0-> m0a0'と一致させることができませんでした

分類Dev

haskell-タイプ '(Char、Int)'と '[Char]'エラーを一致させることができませんでした

分類Dev

`[Int] 'を` Integer-> Int'と一致させることができませんでしたが、GHCIで機能します

分類Dev

カスタム型クラスのインスタンス化:期待される型「b」を実際の型「Int」と一致させることができませんでした

分類Dev

(Integer、Int、Int)をDayに変換する方法。期待される型「Day」を実際の型「(Integer、Int、Int)」と一致させることができませんでした

分類Dev

Haskellプログラミング割り当て、「期待される型「Int」を実際の型「[a0]-> Int」と一致させることができませんでした」およびその他のいくつかのエラー

分類Dev

一部の関数では「 'T [S]'を 'std :: vector <int>'と一致させることができませんでした」が、同じパラメータリストを持つ他の関数では一致しませんでした

分類Dev

Haskellはタイプ `[] 'を` IO'と一致させることができませんでした

分類Dev

Haskell-タイプ[]をIOと一致させることができませんでした

分類Dev

Haskell:エラー:タイプ「[]」を「IO」と一致させることができませんでした

分類Dev

ANTLR4:INTとBOOLEANを一致させることができません

分類Dev

「タイプ `Maybe 'と` IO'を一致させることができませんでした。期待されるタイプ:IO文字列実際のタイプ:Maybe文字列」Haskellで

分類Dev

Haskellで「期待されるタイプIOa0をintと一致させることができなかった」を修正する方法は?

分類Dev

Haskellのソフトウェアトランザクショナルメモリ:期待されるタイプSTM a0を実際のタイプIOと一致させることができませんでした()

分類Dev

予期されたタイプ `[Char] 'を実際のタイプ` a'と一致させることができませんでした

分類Dev

予期されたタイプ `Data.ByteString.Internal.ByteString 'を実際のタイプ` ByteString'と一致させることができませんでした

分類Dev

予想されるタイプIOと一致しませんでした

分類Dev

関数を数値でパラメーター化するときに、期待される型「Int」と一致しませんでした

分類Dev

SWIFT 3:タイプ「のInt」の発現パターンは、タイプ「UnsafeMutableRawPointer」の値と一致することができません

Related 関連記事

  1. 1

    期待されるタイプ '(Int, Int)' を実際のタイプ '[t0]' と一致させることができませんでした

  2. 2

    期待されるタイプ 'a-> Int'を実際のタイプ 'IOArrow StringInt'と一致させることができませんでした

  3. 3

    Haskell-タイプ `(Int、Integer) 'を` Pos'と一致させることができませんでした

  4. 4

    予期されたタイプ 'IO [String]'を実際のタイプ '[String]'と一致させることができませんでした

  5. 5

    期待される型 `Int 'を実際の型[Int]の二乗和と一致させることができませんでした

  6. 6

    期待される型「Int」を実際の型「m0Int」と一致させることができませんでした

  7. 7

    期待される型 `Int 'を実際の型[Int]と一致させることができませんでした

  8. 8

    期待される型 `Maybe(String、Int、String) 'を実際の型`([Char]、t0、[Char])'と一致させることができませんでした

  9. 9

    期待される型 `() 'を実際の型` Int'と一致させることができませんでした

  10. 10

    Haskellは期待される型 '[(Char、b0)]'を実際の型 '(Char、Int)'と一致させることができませんでした

  11. 11

    期待されるタイプ `IO() 'を実際のタイプ` a0-> m0a0'と一致させることができませんでした

  12. 12

    haskell-タイプ '(Char、Int)'と '[Char]'エラーを一致させることができませんでした

  13. 13

    `[Int] 'を` Integer-> Int'と一致させることができませんでしたが、GHCIで機能します

  14. 14

    カスタム型クラスのインスタンス化:期待される型「b」を実際の型「Int」と一致させることができませんでした

  15. 15

    (Integer、Int、Int)をDayに変換する方法。期待される型「Day」を実際の型「(Integer、Int、Int)」と一致させることができませんでした

  16. 16

    Haskellプログラミング割り当て、「期待される型「Int」を実際の型「[a0]-> Int」と一致させることができませんでした」およびその他のいくつかのエラー

  17. 17

    一部の関数では「 'T [S]'を 'std :: vector <int>'と一致させることができませんでした」が、同じパラメータリストを持つ他の関数では一致しませんでした

  18. 18

    Haskellはタイプ `[] 'を` IO'と一致させることができませんでした

  19. 19

    Haskell-タイプ[]をIOと一致させることができませんでした

  20. 20

    Haskell:エラー:タイプ「[]」を「IO」と一致させることができませんでした

  21. 21

    ANTLR4:INTとBOOLEANを一致させることができません

  22. 22

    「タイプ `Maybe 'と` IO'を一致させることができませんでした。期待されるタイプ:IO文字列実際のタイプ:Maybe文字列」Haskellで

  23. 23

    Haskellで「期待されるタイプIOa0をintと一致させることができなかった」を修正する方法は?

  24. 24

    Haskellのソフトウェアトランザクショナルメモリ:期待されるタイプSTM a0を実際のタイプIOと一致させることができませんでした()

  25. 25

    予期されたタイプ `[Char] 'を実際のタイプ` a'と一致させることができませんでした

  26. 26

    予期されたタイプ `Data.ByteString.Internal.ByteString 'を実際のタイプ` ByteString'と一致させることができませんでした

  27. 27

    予想されるタイプIOと一致しませんでした

  28. 28

    関数を数値でパラメーター化するときに、期待される型「Int」と一致しませんでした

  29. 29

    SWIFT 3:タイプ「のInt」の発現パターンは、タイプ「UnsafeMutableRawPointer」の値と一致することができません

ホットタグ

アーカイブ