2016-04-06 5 views
2

私はgetLinesIn = liftM lines . getContentsハスケル:なぜ私はliftMラインを使用できません。 getContents

readAndWriteIn = do 
    list <- getLinesIn 

よりを持っており、それは仕事をdoesntの。 それは言う:期待されたタイプa0 - > m0実際のタイプのIOストリングと文字列を一致させることができませんでした。 なぜそれが分かりませんか? 使用する場合 getLinesFile = liftM lines . readFile 正常に動作します。 私はgetContentsで同じことをする必要があります。方法はありますか?

ありがとうございます。

EDIT: 全出力:

Couldn't match expected type `a0 -> m0 String' 
      with actual type `IO String' 
In the second argument of `(.)', namely `getContents' 
In the expression: liftM lines . getContents 
In an equation for `getLinesIn': 
    getLinesIn = liftM lines . getContents 
+0

''でなければならない機能( 'A0の第2引数」として、おおよそ、エラーが読み込みフルコンパイラの出力 – Daenyth

+0

を貼り付けを使用する必要がありますm0 String')ですが、( 'IO String')ではありません。 – chi

答えて

8

readFilegetContentsはそうあなたがliftM linesとそれを構成する(.)演算子を使用することはできませんだけでIO Stringありながら機能FilePath -> IO Stringです。 (。) - >あなたは

getLinesIn = liftM lines getContents 

または

getLinesIn = fmap lines getContents 
関連する問題