私はHaskellのLLVMバインディングを使い始めようとしています。始めるには、こんにちはワールドです。Haskell LLVM bindingあいまいなタイプ
以下は、製本の著者によるブログのものです。
bldGreet :: CodeGenModule (Function (IO()))
bldGreet = do
puts <- newNamedFunction ExternalLinkage "puts" :: TFunction (Ptr Word8 -> IO Word32)
greetz <- createStringNul "Hello, World!"
func <- createFunction ExternalLinkage $ do
tmp <- getElementPtr greetz (0::Word32, (0::Word32,()))
call puts tmp -- Throw away return value.
ret()
return func
コンパイルされません。
代わりに、私は「あいまいなタイプの変数n0' in the constraint: (type-level-0.2.4:Data.TypeLevel.Num.Sets.NatI n0) arising from a use of
getElementPtr0' 考えられる修正を:これらの型変数(複数可)を修正するタイプの署名を追加」を得る。ここ
が
llvmModule :: TFunction (IO Word32)
llvmModule =
withStringNul "Hello world!" $ \s -> do
puts <- newNamedFunction ExternalLinkage "puts" :: TFunction (Ptr Word8 -> IO Word32)
main <- newNamedFunction ExternalLinkage "main" :: TFunction (IO Word32)
defineFunction main $ do
tmp <- getElementPtr0 s (0::Word32,())
_ <- call puts tmp
ret (0::Word32)
return main
最初はそうで作業しバリエーションですより自然。私が持っている質問は、最初の曖昧さは何か、それをどうやって解決するのかです。私が持っている第二の質問は、第二の質問があいまいではない理由です。
これはタイプミスで0を忘れる可能性がありますか? getElementPtr0 < - ?私はちょうどここで推測しています。 –
いいえ2つの異なる機能があります。 getElementPtr0はデフォルト値を使用します.getElementPtrはそうではありません。したがって、余分な引数です。また、エラーは、私は確かに、typeclassものです。それ(GHC)は、私にそれをより具体的なものに伝えたいと思っています。私はそれが何を望んでいるのか分かりませんでした。 –
多分http://hpaste.org/完全なものだから、プロがそれと一緒にすることができます:) –