IT練習ノート

IT関連で調べたこと(実際は嵌ったこと)を書いています。

‘Distribution.Package’ does not export

geojsonパッケージをビルドした時に

‘Distribution.Package’ does not export ‘PackageName(PackageName)’

というエラーでビルドに失敗しました。

エラーになっているファイルはSetup.hsファイルです。

module Main (main) where

import Distribution.Simple

main :: IO ()
main = defaultMain

依存関係の整合性がなくなったためと思われます。

github.com

2016年ごろからあるようですが、まだクローズされていないようです。

geojsonパッケージのインストール

aesonパッケージの上のレイヤでGeoJSONを扱うためのパッケージです。

geojson: A thin GeoJSON Layer above the aeson library

hackageでは2018/02時点で、1.3.1ですが、hackageにアップロードされているモジュールと、githubにあるモジュールに差異があるようです。

hackageではDependencies aeson (>=0.8 && <1.0)となっていますが、github上ではaeson >= 0.8となっています。aeson自体も1.2.4ですので、githubから取得したほうが良いでしょう。

また、geojson自体の依存関係も最新に追いついていないようです。

validationパッケージに依存していますが、最新の0.6では、Validationがエクスポートされていないということで、geojsonのビルドに失敗します。

とりあえずは、cabalファイルを下記のように書き換えてビルドはできるようになりました。validationのパッケージを固定して、ワーニングは許容するようにしました。

(本来はgeojsonのほうを直すべきでしょうがわかりませんでした。)

$ git diff
diff --git a/geojson.cabal b/geojson.cabal
index 0c772e7..ec0d23e 100644
--- a/geojson.cabal
+++ b/geojson.cabal
@@ -41,7 +41,7 @@ library
                     ,   text            >= 1.2
                     ,   scientific      >= 0.2.0
                     ,   transformers    >= 0.3
-                    ,   validation      >= 0.5
+                    ,   validation      >= 0.5 && <0.6
                     ,   vector          >= 0.10
     exposed-modules:    Data.Geospatial
                     ,   Data.LinearRing
@@ -61,7 +61,7 @@ library
                     ,   Data.Geospatial.Internal.GeoPosition
     default-language:   Haskell2010
     ghc-options:        -Wall
-                        -Werror
+--                        -Werror

 test-suite              geojson-test
     hs-source-dirs:     test
@@ -86,7 +86,7 @@ test-suite              geojson-test
                     ,   Data.Geospatial.Internal.GeometryTests
     default-language:   Haskell2010
     ghc-options:        -Wall
-                        -Werror
+--                        -Werror
                         -threaded
                         -O2

@@ -98,6 +98,6 @@ test-suite              geojson-hlint
                     ,   hlint
     default-language:   Haskell2010
     ghc-options:        -Wall
-                        -Werror
+--                        -Werror
                         -threaded
                         -O2

MySQLでのGeometry型のselect

テキストで取得

mysql-sql> select st_astext(geo) from geo_tbl;
+--------------------------------------------------------------------+
| st_astext(geo)                                                     |
+--------------------------------------------------------------------+
| POINT(30 10)                                                       |
| LINESTRING(30 10,10 30,40 40)                                      |
| POLYGON((30 10,40 40,20 40,10 20,30 10))                           |
| POLYGON((35 10,45 45,15 40,10 20,35 10),(20 30,35 35,30 20,20 30)) |
| POINT(1.5 2.5)                                                     |
| POINT(1.5 2.5)                                                     |
| POINT(1.5 2.5)                                                     |
| POINT(1.5 2.5)                                                     |
| POINT(1.5 2.5)                                                     |
+--------------------------------------------------------------------+
9 rows in set (0.01 sec)
mysql-sql>

GeoJSONで取得

mysql-sql> select st_asGeojson(geo) from geo_tbl;
+------------------------------------------------------------------------------------------------------------------------------------+
| st_asGeojson(geo)                                                                                                                  |
+------------------------------------------------------------------------------------------------------------------------------------+
| {"type": "Point", "coordinates": [30, 10]}                                                                                         |
| {"type": "LineString", "coordinates": [[30, 10], [10, 30], [40, 40]]}                                                              |
| {"type": "Polygon", "coordinates": [[[30, 10], [40, 40], [20, 40], [10, 20], [30, 10]]]}                                           |
| {"type": "Polygon", "coordinates": [[[35, 10], [45, 45], [15, 40], [10, 20], [35, 10]], [[20, 30], [35, 35], [30, 20], [20, 30]]]} |
| {"type": "Point", "coordinates": [1.5, 2.5]}                                                                                       |
| {"type": "Point", "coordinates": [1.5, 2.5]}                                                                                       |
| {"type": "Point", "coordinates": [1.5, 2.5]}                                                                                       |
| {"type": "Point", "coordinates": [1.5, 2.5]}                                                                                       |
| {"type": "Point", "coordinates": [1.5, 2.5]}                                                                                       |
+------------------------------------------------------------------------------------------------------------------------------------+
9 rows in set (0.02 sec)