小编err*_*rom的帖子

对SPECIALIZE pragma的误解

SPECIALIZE编译指示的目的是创建更具体的函数版本.

我有一个功能

adaptBlocks :: Int -> BlocksField a -> Maybe (BlocksField a)
Run Code Online (Sandbox Code Playgroud)

我把它专门化如下:

{-# SPECIALIZE NOINLINE
    adaptBlocks :: Int -> BlocksField Element -> Maybe (BlocksField Element) #-}
Run Code Online (Sandbox Code Playgroud)

但编译器给了我这个令人困惑的警告:

SPECIALISE pragma for non-overloaded function ‘adaptBlocks’
Run Code Online (Sandbox Code Playgroud)

怎么了?

haskell compiler-warnings ghc

8
推荐指数
1
解决办法
193
查看次数

lein编译问题(Clojure)

我一直试图找到一个3小时的解决方案,没有任何帮助.有这样的雷音项目project.clj:

(defproject funcs "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.8.0"]
                 [org.xerial/sqlite-jdbc "3.7.2"]])
Run Code Online (Sandbox Code Playgroud)

同样,还有一个core.clj标题:

(ns funcs.core
  (:gen-class)
  (:import (java.sql.Connection)
           (java.sql.DriverManager)
           (java.sql.ResultSet)
           (java.sql.SQLException)
           (java.sql.Statement))
  (:require [clojure.string    :as str]
            [clojure.java.jdbc :as j])) ; JDBC Driver for SQLite
Run Code Online (Sandbox Code Playgroud)

lein deps我尝试编译core.clj之后,但得到:

Compiling src/funcs/core.clj
Could not locate funcs/core/clj__init.class or funcs/core/clj.clj on classpath.
Exception in thread "main" java.io.FileNotFoundException: Could not locate funcs/core/clj__init.class or funcs/core/clj.clj on classpath., compiling:(/tmp/form-init8916675856325046616.clj:1:73)
    at clojure.lang.Compiler.load(Compiler.java:7391) …
Run Code Online (Sandbox Code Playgroud)

java import clojure require leiningen

2
推荐指数
1
解决办法
442
查看次数

如何通过'TypeRep'指定值的类型?

我的目标是编写带有一些多态值的函数,并列出表示具体类型的typereps.它返回具有相同值的新列表,但已经转换为通过typereps指定的具体类型.

让我们有值的这种列表:["one", "two"]-XOverloadedStrings启用.
每个的类型分别是IsString a => a.

我们可以通过这种方式获得的类型的列表:

import Data.Typeable (Proxy(..), typeRep)
import Data.Text     (Text)

[typeRep (Proxy :: Proxy String), typeRep (Proxy :: Proxy ByteString)]
Run Code Online (Sandbox Code Playgroud)

有没有办法获得"one"类型String"two"类型ByteString

PS为了防止根据包含不同类型值的列表的错误,我们可以包装每个值Dynamic.,如下例所示(伪代码):

 {-# LANGUAGE ParallelListComp #-}

 import Data.Dynamic (toDyn)

 [ toDyn (val :: type') | val <- vals | type' <- concreteTypes ]
Run Code Online (Sandbox Code Playgroud)

它可以使用Template Haskell完成,但它太难看了.

polymorphism haskell types dynamic generic-programming

1
推荐指数
1
解决办法
180
查看次数