Skip to content

Commit

Permalink
Write more signatures
Browse files Browse the repository at this point in the history
  • Loading branch information
minoki committed Jan 24, 2024
1 parent 5d59035 commit 413f656
Show file tree
Hide file tree
Showing 9 changed files with 637 additions and 5 deletions.
2 changes: 2 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ sources = \
pluto/parser-combinator.fun \
pluto/char-parser.sig \
pluto/char-parser.fun \
src/compat/ord_set.sig \
src/compat/ord_map.sig \
src/list-util.sml \
src/vector-util.sml \
src/numeric.sml \
Expand Down
45 changes: 45 additions & 0 deletions src/compat/ord_map.sig
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
signature ORD_MAP_COMPAT = sig
structure Key : ORD_KEY
type 'a map
val empty : 'a map
val isEmpty : 'a map -> bool
val singleton : Key.ord_key * 'a -> 'a map
val insert : 'a map * Key.ord_key * 'a -> 'a map
val insert' : (Key.ord_key * 'a) * 'a map -> 'a map
val insertWith : ('a * 'a -> 'a) -> 'a map * Key.ord_key * 'a -> 'a map
val insertWithi : (Key.ord_key * 'a * 'a -> 'a) -> 'a map * Key.ord_key * 'a -> 'a map
val find : 'a map * Key.ord_key -> 'a option
val lookup : 'a map * Key.ord_key -> 'a
val inDomain : 'a map * Key.ord_key -> bool
val remove : 'a map * Key.ord_key -> 'a map * 'a
(* val findAndRemove : 'a map * Key.ord_key -> ('a map * 'a) option *)
val first : 'a map -> 'a option
val firsti : 'a map -> (Key.ord_key * 'a) option
val numItems : 'a map -> int
val listItems : 'a map -> 'a list
val listItemsi : 'a map -> (Key.ord_key * 'a) list
val listKeys : 'a map -> Key.ord_key list
val collate : ('a * 'a -> order) -> 'a map * 'a map -> order
val unionWith : ('a * 'a -> 'a) -> 'a map * 'a map -> 'a map
val unionWithi : (Key.ord_key * 'a * 'a -> 'a) -> 'a map * 'a map -> 'a map
val intersectWith : ('a * 'b -> 'c) -> 'a map * 'b map -> 'c map
val intersectWithi : (Key.ord_key * 'a * 'b -> 'c) -> 'a map * 'b map -> 'c map
val mergeWith : ('a option * 'b option -> 'c option) -> 'a map * 'b map -> 'c map
val mergeWithi : (Key.ord_key * 'a option * 'b option -> 'c option) -> 'a map * 'b map -> 'c map
val app : ('a -> unit) -> 'a map -> unit
val appi : (Key.ord_key * 'a -> unit) -> 'a map -> unit
val map : ('a -> 'b) -> 'a map -> 'b map
val mapi : (Key.ord_key * 'a -> 'b) -> 'a map -> 'b map
val foldl : ('a * 'b -> 'b) -> 'b -> 'a map -> 'b
val foldli : (Key.ord_key * 'a * 'b -> 'b) -> 'b -> 'a map -> 'b
val foldr : ('a * 'b -> 'b) -> 'b -> 'a map -> 'b
val foldri : (Key.ord_key * 'a * 'b -> 'b) -> 'b -> 'a map -> 'b
val filter : ('a -> bool) -> 'a map -> 'a map
val filteri : (Key.ord_key * 'a -> bool) -> 'a map -> 'a map
val mapPartial : ('a -> 'b option) -> 'a map -> 'b map
val mapPartiali : (Key.ord_key * 'a -> 'b option) -> 'a map -> 'b map
val exists : ('a -> bool) -> 'a map -> bool
val existsi : (Key.ord_key * 'a -> bool) -> 'a map -> bool
val all : ('a -> bool) -> 'a map -> bool
val alli : (Key.ord_key * 'a -> bool) -> 'a map -> bool
end
39 changes: 39 additions & 0 deletions src/compat/ord_set.sig
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
signature ORD_SET_COMPAT = sig
structure Key : ORD_KEY
type item = Key.ord_key
type set
val empty : set
val singleton : item -> set
val fromList : item list -> set
val toList : set -> item list
val add : set * item -> set
val add' : item * set -> set
val addList : set * item list -> set
val subtract : set * item -> set
val subtract' : item * set -> set
val subtractList : set * item list -> set
val delete : set * item -> set
val member : set * item -> bool
val isEmpty : set -> bool
val minItem : set -> item
val maxItem : set -> item
val equal : set * set -> bool
val compare : set * set -> order
val isSubset : set * set -> bool
val disjoint : set * set -> bool
val numItems : set -> int
val listItems : set -> item list
val union : set * set -> set
val intersection : set * set -> set
val difference : set * set -> set
val map : (item -> item) -> set -> set
val mapPartial : (item -> item option) -> set -> set
val app : (item -> unit) -> set -> unit
val foldl : (item * 'b -> 'b) -> 'b -> set -> 'b
val foldr : (item * 'b -> 'b) -> 'b -> set -> 'b
val partition : (item -> bool) -> set -> set * set
val filter : (item -> bool) -> set -> set
val exists : (item -> bool) -> set -> bool
val all : (item -> bool) -> set -> bool
val find : (item -> bool) -> set -> item option
end
2 changes: 2 additions & 0 deletions src/lunarml-esmod.mlb
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ $(SML_LIB)/basis/basis.mlb
$(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb
$(SML_LIB)/mlyacc-lib/mlyacc-lib.mlb
ann "sequenceNonUnit warn" "valDescInComments error" in
compat/ord_set.sig
compat/ord_map.sig
list-util.sml
vector-util.sml
../pluto/pluto.mlb
Expand Down
2 changes: 2 additions & 0 deletions src/lunarml.mlb
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ $(SML_LIB)/basis/basis.mlb
$(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb
$(SML_LIB)/mlyacc-lib/mlyacc-lib.mlb
ann "sequenceNonUnit warn" in
compat/ord_set.sig
compat/ord_map.sig
list-util.sml
vector-util.sml
../pluto/pluto.mlb
Expand Down
25 changes: 24 additions & 1 deletion src/postparsing.sml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,30 @@
* Copyright (c) 2022 ARATA Mizuki
* This file is part of LunarML.
*)
structure Fixity = struct
structure Fixity :> sig
type Context = { nextVId : int ref
, messageHandler : Message.handler
, languageOptions : LanguageOptions.options
}
type FixityStatusMap = Syntax.FixityStatus Syntax.VIdMap.map
type IdStatusMap'
type IdStatusMap = { valMap : (unit Syntax.IdStatus) Syntax.VIdMap.map
, tyConMap : ((unit Syntax.IdStatus) Syntax.VIdMap.map) Syntax.TyConMap.map
, strMap : IdStatusMap' Syntax.StrIdMap.map
}
type Env = { fixityMap : FixityStatusMap
, dottedFixityMap : Syntax.InfixAssociativity Syntax.VIdMap.map
, idStatusMap : IdStatusMap
, sigMap : IdStatusMap Syntax.SigIdMap.map
, funMap : IdStatusMap Syntax.FunIdMap.map
}
val emptyEnv : Env
val envWithStrMap : IdStatusMap' Syntax.StrIdMap.map -> Env
val envWithSigMap : IdStatusMap Syntax.SigIdMap.map -> Env
val envWithFunMap : IdStatusMap Syntax.FunIdMap.map -> Env
val mergeEnv : Env * Env -> Env
val doProgram : Context * Env * UnfixedSyntax.Program -> Env * Syntax.Program
end = struct

type Context = { nextVId : int ref
, messageHandler : Message.handler
Expand Down
Loading

0 comments on commit 413f656

Please sign in to comment.