5

Haskelineでオートコンプリート機能を実装しようとしています:

import System.Console.Haskeline
import System.Console.Haskeline.IO
import Data.List

mySettings :: Settings IO
mySettings = defaultSettings {
                                historyFile = Just "myhist"
                              , complete = completeWord Nothing " \t" $ return . search
                              }

keywords :: [String]
keywords = ["Point","Line","Circle","Sphere"]

search :: String -> [Completion]
search str = map simpleCompletion $ filter (str `isPrefixOf`) keywords

main :: IO ()
main = do
        inputLine <- initializeInput mySettings
        putStrLn "done"

しかし、このGHCエラーには少しがっかりしています:

Ambiguous type variable `t0' in the constraint:
  (Control.Monad.IO.Class.MonadIO t0)
    arising from a use of `defaultSettings'
Probable fix: add a type signature that fixes these type variable(s)

各関数のタイプを設定しましたが、問題は解決しませんでした。

この型のあいまいさがどこから来て、それを取り除く方法を知っていますか?

4

2 に答える 2

3

の型Settingsは少しポリモーフィックすぎます。Haskelineの作成者はこの問題の可能性を認識しており、この特定の問題を回避するsetComplete関数を提供していたことに注意してください。他の回答が示すように、タイプを手動で指定することもオプションです。

于 2015-04-01T15:16:20.077 に答える