从REPL评估`IO`动作

时间:2017-07-26 02:08:31

标签: idris

假设:

*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中打印出来?

1 个答案:

答案 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