Haskell 如何通過包 組織 不同的 後端

時間 2021-06-02 00:08:27

1樓:

自問自答。。

好吧,這個問題目前貌似真的沒有 "語法糖" 層面的解決方案,ghc-8.4 配套的 cabal 提供了 elif 語法,就好辦多了。

常規的解決思路是編寫一堆flag 再加上一堆複雜的判斷條件,,如果按照 (為何我不能at),Tang Boyun 其實還是會有同樣問題,,我之所以覺得難受是說無論哪種方式,都會使得一部分"資訊"重複,帶來各種不爽,尤其是像我這樣,平時丟三落四的人。

8.4配套的 cabal 提供的 elif 倒是一定程度上解決了這個問題,因為在 elif 中之前 flag 的判斷資訊不需要重複出現,但是還是有一點小缺陷,那就是不互斥,並產生優先順序的問題

所以cabal如果提供能讓 flag 互斥的檢查或者按照 Oleg Grenrus 所提倡的 multiway flags 能提供互斥機智,也就是說按問題中我想描述的例子,cuda 與 llvm 兩種後端是二選一的。但是 Oleg Grenrus 的這個有個問題,multiway flags 可能會導致 cabal stack 等的命令產生相容問題。

下附三中將來會有的 elif 和也許不會有的另兩種方式

elif 語法

...flag a

flag b

flag c

flag d

...if flag(a)

...elif flag(b)

...elif flag(c)

...elif flag(d)

...else

...build-depends: base < 0

提供互斥的方式

...flag a

default: False

flag b

default: False

flag c

default: False

flag d

default: False

mutex

flags: a b c d

default: d

...if flag(a)

build-depends: xx-a

if flag(b)

build-depends: xx-b

if flag(c)

build-depends: xx-c

if flag(d)

build-depends: xx-d

...Oleg Grenrus 提到的 multiway flags

flag xx

values: a, b, c, d

if flag(xx == a)

build-depends: xx-a

if flag(xx == b)

build-depends: xx-b

if flag(xx == c)

build-depends: xx-c

if flag(xx == d)

build-depends: xx-d

# 補充一波

之前想到了類似於typeclass 我們可以有 typepackage,, 然後就被"告知"有何叫backpack的東西存在。 http://plv.

mpi-sws.org/backpack/ 。。

房間牆布用了正粉,硬包用了香檳粉,如何通過選擇其他物品的顏色,改進房間配色?

何度 臥室的話,選用白色配色的床品改善。白色不失優雅那只有遠看純白,近看有花型,有組織結構的低調提花。符合中中國人的審美。羅萊家紡,富安娜,夢潔裡面.富安娜排除,他的套件整體風格顏色太跳,肯定和你這個裝修風格不搭,夢潔也是不錯的,但夢潔的產品的氛圍感沒有那麼強力的衝擊 個人感覺,審美有差異,勿噴 我...

如何通過法律途徑不贍養父親?

某渣人吸毒出來小時候不給撫養費 辦了假殘疾證能動能跳 殘疾人?辦了低保一身奢侈品 天天吃喝玩樂。還告小孩要贍養費 呵呵真是不要臉 法律明確表示不管他是什麼樣人贍養這是孩子的義務。不好意思我只有兩個字沒錢。所以愛咋滴咋滴窮都不怕還怕你能撈到錢?欠了一屁股債執行凍結最好欠的錢不用還了無所謂了進黑名單 阿...

生活作息不規律的人如何通過飲食來讓維持身體健康?

貓叔老徐 生活作息不規律,索性就不要 規律 的飲食了,進行間歇性斷食,每天吃一到兩餐,原則是不餓不吃,讓身體而不是時間來告訴你什麼時候吃飯。吃飯盡量避免精緻碳水化合物,以吃飽為原則。餐間拒絕一切零食。 DD棟 瀉藥飲食上來講 先把咖啡拿掉。三餐正常吃就可以,不知道你是南方還是北方,具體食材不推薦了,...