假设:
*lecture2> :let x = (the (IO Int) (pure 42))
查看其类型,MkFFI C_Types String String
签名的含义是什么?
*lecture2> :t x
x : IO' (MkFFI C_Types String String) Int
然后我尝试从REPL中评估x
:
*lecture2> :exec x
main:When checking argument value to function Prelude.Basics.the:
Type mismatch between
IO Int (Type of x)
and
Integer (Expected type)
另外,为什么42
没有在REPL中打印出来?
答案 0 :(得分:1)
查看其类型,
MkFFI C_Types String String
签名的含义是什么?
IO'
type constructor在其中可用的FFI上进行参数化。它会有所不同,具体取决于例如:你想要定位的后端。在这里,您可以访问{FF} the default one IO
picks。
您可以在REPL中使用:doc
来了解这些事情。例如。 :doc IO'
收益:
Data type IO' : (lang : FFI) -> Type -> Type
The IO type, parameterised over the FFI that is available within it.
Constructors:
MkIO : (World -> PrimIO (WorldRes a)) -> IO' lang a
另外,为什么不在REPL中打印出来?
我不知道:exec x
应该如何运作,但您可以使用x
来代替解释器:x x
,这确实会产生合理的输出:
Idris> :x x
MkIO (\w => prim_io_pure 42) : IO' (MkFFI C_Types String String) Int