我在Haskell中编写了一堆代码来创建文本索引.top函数如下所示:
index :: String -> [(String, [Integer])]
index a = [...]
Run Code Online (Sandbox Code Playgroud)
现在我想给这个函数一个从文件读取的字符串:
index readFile "input.txt"
Run Code Online (Sandbox Code Playgroud)
哪个不起作用,因为readFile的类型为FilePath - > IO String.
无法将预期类型'String'与推断类型'IO String'匹配
我看到错误,但我找不到任何类型的函数:
IO String -> String
Run Code Online (Sandbox Code Playgroud)
我想成功的关键在于Monads的某些地方,但我找不到解决问题的方法.
我希望在非常低的水平上操纵数据.
因此,我有一个函数,它接收一个虚拟内存地址作为一个整数和"做东西"与此内存地址.我从C接口这个函数,所以它有类型(CUInt -> a).我要链接的内存是Word8一个文件.可悲的是,我不知道如何访问指针值Word8.
要清楚,我不需要Word8的值,我需要虚拟内存地址的值,这是指向它的指针的值.
如果SomeType定义为:
data SomeType = X {myBool :: Bool}
| Y {myString :: String}
| Z {myString :: String}
Run Code Online (Sandbox Code Playgroud)
我会更新一个任意的X,取决于他的类型如下:
changeST :: SomeType -> SomeType
changeST (X b) = (X True)
changeST (Y s) = (Y "newString")
changeST (Z s) = (Z "newString")
Run Code Online (Sandbox Code Playgroud)
第三行和第四行完全相同,它们更新给定类型的字符串.有没有办法用一个替换这两行,例如.通过将类型分配给变量?
当类型X定义为:
data X =
X { sVal :: String } |
I { iVal :: Int } |
B { bVal :: Bool }
Run Code Online (Sandbox Code Playgroud)
我希望Int里面有一个X值,如果有的话,否则为零.
returnInt :: X -> Int
Run Code Online (Sandbox Code Playgroud)
如何确定X参数的类型returnInt?