【问题标题】:Top-level expression evaluation at compile time编译时的顶级表达式评估
【发布时间】:2016-11-11 21:53:46
【问题描述】:

有什么方法可以确保在编译时评估如下表达式?

myList :: [Int]
myList = sort [3,2,0,1]

【问题讨论】:

  • 您可以检查生成的 Core 以查看是否执行了优化。但是,AFAIK,没有办法强制这样做。

标签: haskell compile-time-constant


【解决方案1】:

如果您要评估的是Lift 的实例,您可以在编译时使用TemplateHaskell 评估它:

{-# LANGUAGE TemplateHaskell #-}

module Sort where

import Data.List
import Language.Haskell.TH.Syntax

myList :: [Int]
myList = $(lift (sort [3,2,0,1] :: [Int]))

如果你愿意,你可以用-ddump-splices检查它编译成什么:

$ ghc -ddump-splices sort
[1 of 1] Compiling Sort             ( sort.hs, sort.o )
sort.hs:9:12-41: Splicing expression
    lift (sort [3, 2, 0, 1] :: [Int]) ======> [0, 1, 2, 3]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-26
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    相关资源
    最近更新 更多