Fil*_*erg 0 haskell algebraic-data-types
我想能够定义一个自定义数据类型,而不是使用类型别名来确保传递正确的值,下面是一个可能看起来如何的草图,
module Example (fromList) where
import Data.Ord (comparing, Down(..))
import Data.List (sort)
data DictEntry = DictEntry (String, Integer) deriving (Show, Eq)
instance Ord DictEntry where
(DictEntry (word1, freq1)) `compare` (DictEntry (word2, freq2))
| freq1 == freq2 = word1 `compare` word2
| otherwise = comparing Down freq1 freq2
data Dictionary = Dictionary [DictEntry] deriving (Show)
fromList :: [(String, Integer)] -> Dictionary
fromList l = Dictionary $ sort $ map DictEntry l
Run Code Online (Sandbox Code Playgroud)
但是,我还想保留底层类型的"list-ness",而不必打开和重新包装[DictEntry],也不必定义实用程序函数,如head :: Dictionary -> DictEntry和tail :: Dictionary -> Dictionary.那可能吗?是否有一些类型类我可以定义一个实例或一个语言扩展来启用它?
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |