如何在elm-repl中查看Elm表达式或子表达式类型?等价于Haskell的:type/:t命令是什么?
在Elm REPL中查看表达式类型的方法
嘿,刚好我对Elm REPL的类型查看逻辑很熟悉,来给你详细解答~
有没有和Haskell :type/:t等价的命令?
当然有!Elm REPL提供了完全对应的:type命令,它的缩写:t也可以正常使用,用法和Haskell里几乎一模一样——输入:t加上你要查询的表达式,就能直接得到它的类型信息。
几个实用例子:
- 查看基础值的类型:
> :t 3.14 Float > :t "Hello Elm" String > :t True Bool - 查看内置函数的类型:
> :t List.map (a -> b) -> List a -> List b > :t Maybe.withDefault a -> Maybe a -> a - 查看匿名函数的类型:
> :t (\x -> x * 2) number -> number > :t (\msg -> { count = 0, message = msg }) String -> { count : Int, message : String }
如何查看子表达式的类型?
如果想查询复杂表达式中某个子部分的类型,最直接的方式就是把这个子表达式单独提取出来,用:t命令查询就行。
举个例子,假设你有这样一个表达式:
List.map (\item -> String.toUpper item ++ "!") ["apple", "banana"]
如果你想知道里面的(\item -> String.toUpper item ++ "!")这个子表达式的类型,直接把它拿出来用:t查询:
> :t (\item -> String.toUpper item ++ "!") String -> String
另外还有个小技巧:如果你直接在REPL中输入完整表达式,Elm会同时返回它的求值结果和对应的类型。比如输入上面的完整表达式,会得到:
> List.map (\item -> String.toUpper item ++ "!") ["apple", "banana"] ["APPLE!", "BANANA!"] : List String
不过如果表达式带有副作用(比如Debug.log),或者你只想看类型不想执行它,那:t命令就更合适了——它只会分析类型,不会运行表达式。
内容的提问来源于stack exchange,提问作者C.S.Reddy Gadipally
相关产品推荐
相关产品推荐

