하스켈에 대한 LLVM 바인딩을 시작하려고합니다. 시작하기에 가장 좋은 곳은 Hello World입니다.하스켈 LLVM 바인딩 모호한 유형
다음은 바인딩 작성자가 작성한 블로그에서 가져온 것입니다.
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
컴파일되지 않습니다. 여기
작동합니까 변형입니다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
첫 번째는 것 같다
대신 나는 "이러한 유형의 변수 (들)을 고정하는 타입의 서명을 추가 모호한 타입 변수가 getElementPtr0 ' 가능성있는 수정 n0' in the constraint: (type-level-0.2.4:Data.TypeLevel.Num.Sets.NatI n0) arising from a use of
"GET 더 자연스러운. 내가 가지고있는 질문은 첫 번째 모호성이 무엇인지, 어떻게 해결할 수 있습니까? 두 번째 질문은 왜 두 번째 질문이 모호하지 않은지입니다.
오타가 있거나 0을 잊어 버릴 수 있습니까? getElementPtr0 <-? 나는 여기서 추측하고있다. –
아니요 두 가지 다른 기능이 있습니다. getElementPtr0는 getElementPtr이없는 기본 값을 사용하므로 추가 인수가 사용됩니다. 또한, 오류는, 꽤 확신합니다, typeclass 일입니다. 그것은 (GHC) 내가 typeclass에 대해 좀 더 구체적인 것을 말하기를 바랍니다. 나는 단지 그것이 원하는 것을 알아 내지 못했습니다. –
어쩌면 http://hpaste.org/ 완전한 일 이니까 프로가 그걸로 도울 수 있습니다 :) –